#color-palette #material-design #color-scheme #palette #hex-color #material-you

无 std material-colors

最新版 material-color-utilities 端口

15 个不稳定版本 (3 个破坏性更新)

0.4.2 2024 年 8 月 8 日
0.4.1 2024 年 8 月 8 日
0.4.0 2024 年 7 月 28 日
0.3.3 2024 年 5 月 25 日
0.1.1 2023 年 12 月 31 日

#24无标准库

Download history 595/week @ 2024-05-02 199/week @ 2024-05-09 251/week @ 2024-05-16 423/week @ 2024-05-23 210/week @ 2024-05-30 165/week @ 2024-06-06 192/week @ 2024-06-13 176/week @ 2024-06-20 130/week @ 2024-06-27 209/week @ 2024-07-04 199/week @ 2024-07-11 171/week @ 2024-07-18 310/week @ 2024-07-25 280/week @ 2024-08-01 513/week @ 2024-08-08 131/week @ 2024-08-15

每月 1,258 次下载
用于 2 crates

MIT/Apache

345KB
7.5K SLoC

材质颜色

crates.io: material-colors Documentation Build Status License: MIT or Apache 2.0

创建 Material You 主题和颜色方案的 material-color-utilities 库的非官方端口。

功能

  • std: 默认启用,禁用后可以在有分配器的 no_std 环境中使用此 crate
  • image: 添加从图像中提取颜色的支持,需要启用 std 功能
  • serde: 添加主题和颜色方案的 JSON 序列化支持
  • no-libm: 删除基于 libm 的内置 FloatExt 特质实现

示例

从 HEX 颜色

use material_colors::{color::Argb, theme::ThemeBuilder};

let theme = ThemeBuilder::with_source(Argb::from_u32(0xffaae5a4)).build();

// Do whatever you want...

从图像

⚠️ 在获取图像的 ARGB 像素数组之前,强烈建议(但如果您的图像已经很小或者您不介意执行时间,则不是必需的)通过 func:resizestruct:Image 调整其尺寸到 128x128,由 struct:ImageReader 提供。原因请见 这里

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 支持的当前状态

此库 需要 alloc,因为 QuantizerScoreVec 的使用非常频繁,而 DynamicColor 需要 Box 来存储函数。

它还大量使用各种浮点函数,这大大减少了支持的平台数量。是的,我们有 libm 作为后备,但它会产生极端不同和不准确的结果,带来意外的后果,而且显然要慢得多。

如果您有一个具有浮点数操作指令的平台,您将需要自行分叉仓库,因为我很遗憾没有为每个具有相应指令的平台创建实现的方法。不过,如果您有任何建议,我会很乐意听取。

MSRV

当前最低支持的Rust版本为1.63.0。

许可证

双授权以兼容Rust项目。

根据您的选择,许可协议为Apache许可证,版本2.0MIT许可证。此项目只能根据这些条款进行复制、修改或分发。

依赖项

~1.4–2.6MB
~42K SLoC