4个稳定版本
| 3.0.0 | 2023年12月5日 | 
|---|---|
| 2.1.0 | 2023年12月2日 | 
| 2.0.0 | 2022年9月8日 | 
| 1.0.0 | 2021年6月27日 | 
#43 in 图像
5,432 每月下载量
用于 15 个crates (14 直接)
88KB
874 行
hex_color
用于处理RGB(A)十六进制颜色的简单、轻量级库。
文档
模块文档及示例。模块文档还包括对支持解析十六进制颜色的语法的全面描述。
用法
此crate位于crates.io上,您可以通过将hex_color添加到项目的Cargo.toml依赖中来进行使用
[dependencies]
hex_color = "3"
示例
基本解析
use hex_color::HexColor;
let cyan = HexColor::parse("#0FF")?;
assert_eq!(cyan, HexColor::CYAN);
let transparent_plum = HexColor::parse("#DDA0DD80")?;
assert_eq!(transparent_plum, HexColor::rgba(221, 160, 221, 128));
// Strictly enforce only an RGB color through parse_rgb:
let pink = HexColor::parse_rgb("#FFC0CB")?;
assert_eq!(pink, HexColor::rgb(255, 192, 203));
// Strictly enforce an alpha component through parse_rgba:
let opaque_white = HexColor::parse_rgba("#FFFF")?;
assert_eq!(opaque_white, HexColor::WHITE);
灵活构造函数
use hex_color::HexColor;
let violet = HexColor::rgb(238, 130, 238);
let transparent_maroon= HexColor::rgba(128, 0, 0, 128);
let transparent_gray = HexColor::GRAY.with_a(128);
let lavender = HexColor::from_u24(0x00E6_E6FA);
let transparent_lavender = HexColor::from_u32(0xE6E6_FA80);
let floral_white = HexColor::WHITE
    .with_g(250)
    .with_b(240);
全面算术
use hex_color::HexColor;
assert_eq!(HexColor::BLUE + HexColor::RED, HexColor::MAGENTA);
assert_eq!(
    HexColor::CYAN.saturating_add(HexColor::GRAY),
    HexColor::rgb(128, 255, 255),
);
assert_eq!(
    HexColor::BLACK.wrapping_sub(HexColor::achromatic(1)),
    HexColor::WHITE,
);
与 rand 一起
使用 rand + std 功能通过 rand 生成随机颜色
use hex_color::HexColor;
let random_rgb: HexColor = rand::random();
要指定是否随机创建RGB或RGBA颜色,请分别使用 HexColor::random_rgb 或 HexColor::random_rgba
use hex_color::HexColor;
let random_rgb = HexColor::random_rgb();
let random_rgba = HexColor::random_rgba();
与 serde 一起
使用 serde 将颜色以多种格式进行序列化和反序列化:u24、u32、rgb 或 rgba
use hex_color::HexColor;
use serde::{Deserialize, Serialize};
use serde_json::json;
#[derive(Debug, PartialEq, Deserialize, Serialize)]
struct Color {
    name: String,
    value: HexColor,
}
let json_input = json!({
    "name": "Light Coral",
    "value": "#F08080",
});
assert_eq!(
    serde_json::from_value::<Color>(json_input)?,
    Color {
        name: String::from("Light Coral"),
        value: HexColor::rgb(240, 128, 128),
    },
);
let my_color = Color {
    name: String::from("Dark Salmon"),
    value: HexColor::rgb(233, 150, 122),
};
assert_eq!(
    serde_json::to_value(my_color)?,
    json!({
        "name": "Dark Salmon",
        "value": "#E9967A",
    }),
);
#[derive(Debug, PartialEq, Deserialize, Serialize)]
struct NumericColor {
    name: String,
    #[serde(with = "hex_color::u24")]
    value: HexColor,
}
let json_input = json!({
    "name": "Light Coral",
    "value": 0x00F0_8080_u32,
});
assert_eq!(
    serde_json::from_value::<NumericColor>(json_input)?,
    NumericColor {
        name: String::from("Light Coral"),
        value: HexColor::rgb(240, 128, 128),
    },
);
let my_color = NumericColor {
    name: String::from("Dark Salmon"),
    value: HexColor::rgb(233, 150, 122),
};
assert_eq!(
    serde_json::to_value(my_color)?,
    json!({
        "name": "Dark Salmon",
        "value": 0x00E9_967A_u32,
    }),
);
特性
- rand启用与- randcrate 的原生兼容性。
- serde启用与- serdecrate 的序列化和反序列化。
- std在- std::error::Error上启用对- ParseHexColorError的错误处理。否则,它需要与- rand一起使用以进行- HexColor::random_rgb、- HexColor::random_rgba和当然,- rand::random。
注意:默认情况下仅启用 std 功能。
许可证
许可协议为以下之一
- Apache License 2.0(《LICENSE-APACHE》或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(《LICENSE-MIT》或 https://open-source.org.cn/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则任何有意提交给工作以包含在内的贡献,根据 Apache-2.0 许可证定义,应双重许可如上所述,无需附加条款或条件。
依赖项
~0–510KB