#rgb #hsl #ansi-colors #color-conversion #converter #cmyk #color

no-std colorsys

一个用于颜色转换和变异的模块。支持 RGB(a)(也作为十六进制),HSL(a),CMYK 颜色模型以及 ANSI 颜色代码

19 个版本

0.6.7 2023年1月22日
0.6.6 2022年6月15日
0.6.5 2021年10月23日
0.6.3 2021年2月6日
0.5.3 2019年7月27日

#18 in 图像

Download history 4735/week @ 2024-04-21 3963/week @ 2024-04-28 4330/week @ 2024-05-05 5695/week @ 2024-05-12 5107/week @ 2024-05-19 4364/week @ 2024-05-26 5254/week @ 2024-06-02 3858/week @ 2024-06-09 3223/week @ 2024-06-16 3978/week @ 2024-06-23 2615/week @ 2024-06-30 2954/week @ 2024-07-07 3134/week @ 2024-07-14 2529/week @ 2024-07-21 3367/week @ 2024-07-28 2772/week @ 2024-08-04

11,939 每月下载量
用于 33 个crate (25直接)

MIT 许可证

85KB
2.5K SLoC

colorsys

Crates.io

一个用Rust编写的颜色转换和变异模块。目前支持以下颜色模型

  • RGB(a)(也作为十六进制)
  • HSL(a)
  • CMYK(a)
  • ANSI256代码

文档

它能做什么

获取器 & 设置器

use colorsys::{Rgb, Hsl, ColorAlpha};

let rgb = Rgb::from((57.3, 12.7, 53.0));
let r = rgb.red();
// 57.3

let mut hsl = Hsl::default();
// Hsl { h: 0, s: 0, l: 0, a: 1 }
hsl.set_saturation(13.98);
hsl.set_saturation(305.71);
hsl.set_alpha(0.75);
// Hsl { h: 305.71, s: 13.98, l: 0, a: 0.75 }

转换

有关更多信息,请参阅文档中 From/FromStr/Into 特性的实现

use colorsys::{Rgb, Hsl};

let rbga_tuple = (57.3, 12.7, 53.0, 0.33);
let rgba = Rgb::from(&rbga_tuple);
let hsla: Hsl = rgba.as_ref().into();
// ~Hsl { h: 305.78, s: 63.71, l: 13.73, a: 0.33 }

let rgb_arr: [u8; 3] = Rgb::from(&hsla).into();
// ~[57, 13, 53]

let hsla_tuple: (f64,f64,f64,f64) = Hsl::from( Rgb::from(rgb_tuple) ).into();
// ~Hsl { h: 305.78, s: 63.71, l: 13.73, a: 1 }

let hex: String = rgba.to_hex_string();
// #390d35

//
// From/Into
//
let rgb1 = Rgb::from_hex_str("37ea4c").unwrap();
  
let rgb2 = Rgb::from(
Into::<[f32; 4]>::into(Rgb::from(
  Into::<[u8; 3]>::into(
    Rgb::from(
      Into::<(i32,i32,i32)>::into(
        Rgb::from(
          Into::<[i64; 3]>::into(&rgb1)
        )
      )
    )
  )
))
);

assert_eq!(rgb1, rgb2);

//
// Ratio
//
use colorsys::{RgbRatio, ApproxEq};
let blue = Rgb::from([34, 111, 235]);

let ratio: [f32; 4] = blue.as_ratio().into();
// ~[0.133, 0.435, 0.922, 1.0]

let converted: Rgb = RgbRatio::from(&ratio).into();
assert!(blue.approx_eq_clarify(&converted, 0.0001));

修改

有关更多信息,请参阅文档中 ColorTransform/Add*/Sub*.. 特性的说明

use colorsys::{Hsl, Rgb, ColorTransform,ColorAlpha, SaturationInSpace};

let mut rgb: Rgb = (245.0,152.0,53.0).into();

rgb.lighten(20.1);
// ~Rgb { r: 249.83, g: 201.80, b: 150.67 }

rgb.opacify(-0.7);
rgb.saturate( SaturationInSpace::Hsl(-35.7) );
// ~Rgb { r: 230.29, g: 201.19, b: 170.21, a: 0.3 }

rgb.grayscale_simple();
// ~Rgb { r: 200.255, g: 200.255, b: 200.255, a: 0.3 }


let mut hsl = Hsl::from(&rgb);
hsl.opacify(1.0);
// ~Hsl { h: 0.0, s: 0.0, l: 78.53 }

hsl.adjust_hue(231.99);
hsl.saturate(SaturationInSpace::Hsl(55.7));

let mut rgb2: Rgb = hsl.as_ref().into();
// ~Rgb { r: 169.76, g: 177.9, b: 230.75}

rgb2.invert();
// ~Rgb { r: 85.24, g: 77.09, b: 24.25 }

let rgb3 = rgb - rgb2;
// ~Rgb { r: 115.01, g: 123.16, b: 176.0 }

let hsl2 = hsl + rgb3.into();
// ~Hsl { h: 0.0, s: 83.55, l: 100.0 }

从字符串和CSS字符串表示形式解析

use colorsys::{Hsl, Rgb};
use std::str::FromStr;

let s = "rgb(177, 255, 176)";

let rgb: Rgb = s.parse().unwrap();

rgb.to_css_string();
// String: "rgb(177,255,176)"

rgb.to_hex_string();
// #b1ffb0

Hsl::from_str("hsl(168, 52%, 42%)").unwrap().to_css_string();
// String: hsl(168,52%,42%)

no_std

Crate有一个名为"std"的Cargo功能,默认启用。为了在no_std环境中使用colorsys,需要禁用此功能。修改您的依赖关系以选择退出默认功能。

[dependencies]
colorsys = { version = "*", default-features = false }

颜色单位范围

所有颜色单位都是f64。以下是它们的范围

  • 红色:0.0 - 255.0
  • 绿色:0.0 - 255.0
  • 蓝色:0.0 - 255.0
  • 色调:0.0 - 360.0
  • 饱和度:0.0 - 100.0
  • 亮度:0.0 - 100.0
  • 在cmyk中所有都是:0.0 - 100.0
  • 透明度:0.0 - 1.0
  • ANSI256代码是u8

如果您指定的值不在此范围内,则它们将被替换为最小值或最大值。

享受使用它!

许可证

此模块遵循MIT许可证

无运行时依赖项

功能