12 releases

0.3.3 May 25, 2024
0.3.2 May 8, 2024
0.2.1 Mar 14, 2024
0.1.6 Feb 2, 2024
0.1.1 Dec 31, 2023

#136 in Images

Download history 215/week @ 2024-03-27 182/week @ 2024-04-03 150/week @ 2024-04-10 158/week @ 2024-04-17 147/week @ 2024-04-24 502/week @ 2024-05-01 383/week @ 2024-05-08 225/week @ 2024-05-15 444/week @ 2024-05-22 210/week @ 2024-05-29 180/week @ 2024-06-05 187/week @ 2024-06-12 169/week @ 2024-06-19 132/week @ 2024-06-26 210/week @ 2024-07-03 164/week @ 2024-07-10

705 downloads per month
Used in 2 crates

Apache-2.0

340KB
7.5K SLoC

Material colors

An unofficial port of the material-color-utilities library for creating Material You themes and color schemes.

Examples

From HEX color:

use std::str::FromStr;
use material_colors::{color::Argb, theme::ThemeBuilder};

fn main() {
    let theme = ThemeBuilder::with_source(Argb::from_str("aae5a4").unwrap()).build();

    // Do whatever you want...
}

From image:

⚠️ Before obtaining an array of ARGB pixels for the image, it is recommended (but not necessary if your image is already small in size or you just don't mind about execution time) to adjust its dimensions to 128x128 by func:resize from struct:Image provided by struct:ImageReader. The reason is described here.

use material_colors::{
    image::{FilterType, ImageReader},
    theme::ThemeBuilder,
};

#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
    let image = reqwest::get("https://picsum.photos/id/866/1920/1080")
        .await?
        .bytes()
        .await?
        .to_vec();

    let mut data = ImageReader::read(image).expect("failed to read image");

    // Lancsoz3 takes a little longer, but provides the best pixels for color extraction.
    // However, if you don't like the results, you can always try other FilterType values.
    data.resize(128, 128, FilterType::Lanczos3);

    let theme = ThemeBuilder::with_source(ImageReader::extract_color(&data)).build();

    // Do whatever you want...

    Ok(())
}

Dependencies

~1.5–4.5MB
~39K SLoC