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
启用与rand
crate 的原生兼容性。serde
启用与serde
crate 的序列化和反序列化。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》或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则任何有意提交给工作以包含在内的贡献,根据 Apache-2.0 许可证定义,应双重许可如上所述,无需附加条款或条件。
依赖项
~0–510KB