#color-space #color #rgb #pixel #lch

luv

用于在sRGB、CIE Luv和CIE LCh(uv)色彩空间之间转换颜色并在颜色差异上进行比较的工具

3个版本

0.9.2 2024年1月31日
0.9.1 2021年5月10日
0.9.0 2021年4月30日

#648图像


用于 image-decompose

MITLGPL-3.0-or-later

35KB
492

Luv

用于在sRGB、L*u*v*和LCh(uv)色彩空间之间转换颜色并在颜色差异上进行比较的工具。

对于这个crate来说,sRGB颜色被视为由0到255的u8值组成,而L*u*v*颜色则由自己的结构体表示,该结构体使用f32值。这个crate倾向于sRGB,因此它还假设L*u*v*使用D65参考白点。

使用

转换单个值

要转换单个值,请使用以下函数之一

  • luv::Luv::from_rgb(rgb: &[u8; 3]) ->Luv
  • luv::Luv::from_rgba(rgba: &[u8; 4]) -> Luv(删除第四个alpha字节)
  • luv::Luv::to_rgb(&self) -> [u8; 3]
let pink = luv::Luv::from_rgb(&[253, 120, 138]);
assert_eq!(luv::Luv { l: 66.637695, u: 93.02938, v: 9.430316 }, pink);

转换多个值

要转换值的切片

  • luv::rgbs_to_luvs(rgbs: &[[u8; 3]]) -> Vec<Luv>
  • luv::luvs_to_rgbs(luvs: &[Luv]) -> Vec<[u8; 3]>
  • luv::rgb_bytes_to_luvs(bytes: &[u8]) -> Vec<Luv>
  • luv::luvs_to_rgb_bytes(luvs: &[Luv]) -> Vec<u8>
let rgbs = vec![
    [0xFF, 0x69, 0xB6],
    [0xE7, 0x00, 0x00],
    [0xFF, 0x8C, 0x00],
    [0xFF, 0xEF, 0x00],
    [0x00, 0x81, 0x1F],
    [0x00, 0xC1, 0xC1],
    [0x00, 0x44, 0xFF],
    [0x76, 0x00, 0x89],
];

let luvs = luv::rgbs_to_luvs(&rgbs);
use luv::rgb_bytes_to_luvs;

let rgbs = vec![
    0xFF, 0x69, 0xB6,
    0xE7, 0x00, 0x00,
    0xFF, 0x8C, 0x00,
    0xFF, 0xEF, 0x00,
    0x00, 0x81, 0x1F,
    0x00, 0xC1, 0xC1,
    0x00, 0x44, 0xFF,
    0x76, 0x00, 0x89,
];

let luvs = rgb_bytes_to_luvs(&rgbs);

功能

该crate定义了一个approx功能。如果启用,将实现由approx crate定义的近似相等性,适用于LuvLCh类型。

其他crate

这个crate的设计——以及在一定程度上代码——基于lab crate,它提供在sRGB、L*a*\b和LCh(ab)色彩空间之间转换颜色的例程。

对于sRGB和XYZ色彩空间之间的转换,这个crate依赖于srgb crate

依赖项

~1.9–4.5MB
~56K SLoC