| Crates.io | material-colors |
| lib.rs | material-colors |
| version | 0.4.2 |
| created_at | 2023-12-04 18:56:56.118713+00 |
| updated_at | 2024-08-08 17:59:15.202549+00 |
| description | Up-to-date material-color-utilities port |
| homepage | https://github.com/Aiving/material-colors |
| repository | https://github.com/Aiving/material-colors.git |
| max_upload_size | |
| id | 1057941 |
| size | 371,220 |
An unofficial port of the material-color-utilities library for creating Material You themes and color schemes.
std: enabled by default, disabling makes it possible to use the crate in no_std environments, provided there is an allocator availableimage: adds support for extracting colors from images, requires std feature enabledserde: adds support for JSON serialization of themes and color schemesno-libm: removes the built-in implementation of FloatExt trait, which is based on libmFrom HEX color:
use material_colors::{color::Argb, theme::ThemeBuilder};
let theme = ThemeBuilder::with_source(Argb::from_u32(0xffaae5a4)).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:resizefromstruct:Imageprovided bystruct: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(())
}
no-std supportThis library requires alloc because Quantizer and Score make heavy use of Vec, and DynamicColor requires Box for function storage.
It also makes heavy use of various floating point functions, which greatly reduces the number of supported platforms. Yes, we have libm as a fallback, but it gives extremely different and inaccurate results, with unexpected consequences, and is also obviously much slower.
In case you have a platform where there are corresponding instructions for operations on floating point numbers, you will have to fork the repository yourself, as I unfortunately don't have any way to create an implementation for every platform that has corresponding instructions. If you have any suggestions, however, I'd be happy to hear them.
The Minimum Supported Rust Version is currently 1.63.0.
Dual-licensed to be compatible with the Rust project.
Licensed under the Apache License, Version 2.0 or the MIT license, at your option. This project may not be copied, modified, or distributed except according to those terms.