14个版本
0.1.13 | 2023年7月28日 |
---|---|
0.1.12 | 2023年7月26日 |
0.1.11 | 2023年5月11日 |
0.1.6 | 2023年4月29日 |
#215 in 算法
162 每月下载量
用于 2 crates
56KB
1.5K SLoC
这是一个非常简单且易于使用的颜色转换工具,可以轻松地在十六进制、RGB、RGBA、HSL、HSLA、HSV和CMYK之间转换颜色。每种类型都有其独特的API,例如RGB可以设置颜色通道,RGBA可以设置透明度,HSL可以设置色调、饱和度和亮度等。
use easy_color::{RGBA, RGB, HSL, Hex, ColorMix};
use crate::easy_color::{IntoRGB, IntoHex, IntoRGBA, IntoHSL, IntoHSLA, IntoHSV, IntoCMYK};
let hex:Hex = "#2bc48a".try_into().unwrap();
let mut rgb:RGB = hex.into();
// or
let mut rgb = hex.to_rgb();
assert_eq!(rgb.to_string(), "rgb(43,196,138)");
rgb.set_red(255);
assert_eq!(rgb.to_string(), "rgb(255,196,138)");
let mut rgba:RGBA = rgb.into();
// or
let mut rgba = rgb.to_rgba();
rgba.set_alpha(0.5);
assert_eq!(rgba.to_string(), "rgba(255,196,138,0.50)");
let mut hsl:HSL = rgba.into();
// or
let mut hsl = rgba.to_hsl();
hsl.set_hue(240);
assert_eq!(hsl.to_string(), "hsl(240,100%,88%)");
let hex:Hex = hsl.into();
// or
let hex = hsl.to_hex();
assert_eq!(hex.to_string(), "#C2C1FF");
// mix two color
let hsl:HSL = (0,0,0).try_into().unwrap();
let rgba:RGBA = (255,255,255,1.0).try_into().unwrap();
rgba.mix(hsl, None).to_string(); // rgba(127,127,127,1.00)
rgba.mix(hsl, Some(0.35)).to_string(); // rgba(165,165,165,1.00)//!
hsl.mix(rgba, None).to_string(); // hsl(0,0%,50%)
rgba.is_dark(); // false
rgba.is_light(); // true
rgba.fade(0.5); // rgba(255,255,255, 0.5)
// creat random color
let rgb = RGB::random();
let rgba = RGBA::random();
let hsl = HSL::random();
let hex:Hex = "#2bc48a".try_into().unwrap();
let hex_str = hex.to_rgb().set_blue(255).to_hsl().set_lightness(50).to_cmyk().set_cyan(100).to_hex().to_string(); // #00B5FF
十六进制
let _hex:Hex = "#FAC".try_into().unwrap();
let _hex:Hex = "#FFDFAC".try_into().unwrap();
let _hex:Hex = "#FFDFACDC".try_into().unwrap() // hex with transparency
let rgba:RGBA = "rgba(255,223,172,0.85)".try_into().unwrap();
let hex:Hex = rgba.into();
let hex_str = hex.to_hex_alpha();
assert_eq!(hex_str, "#FFDFACD8");
let hex_str2 = hex.to_alpha_hex();
assert_eq!(hex_str, "#D8FFDFAC");
将十六进制转换为其他类型,例如
let hex:Hex = "#FFDFAC".try_into().unwrap();
let rgb:RGB = hex.into();
assert_eq!(rgb.to_string(), "rgb(255,223,172)");
let _hsl:HSL = hex.into();
let _rgba:RGBA = hex.into();
let _hsla:HSLA = hex.into();
let _hsv:HSV = hex.into();
let _cmyk:CMYK = hex.into();
RGB
RGB可以从格式为"rgb(r,g,b)"的字符串或从元组(r,g,b)中解析
- r:u8 - 红色值(0~255)
- g:u8 - 绿色值(0~255)
- b:u8 - 蓝色值(0~255)
let mut rgb:RGB = "rgb(43,196,138)".try_into().unwrap();
rgb.set_green(255);
assert_eq!(rgb.to_string(), "rgb(43,255,138)");
let rgb:RGB = (43, 196, 138).try_into().unwrap();
assert_eq!(rgb.to_string(), "rgb(43,196,138)");
let hex:Hex = rgb.into();
assert_eq!(hex.to_string(), "#2BC48A");
let _rgba:RGBA = rgb.into();
let _hsl:HSL = rgb.into();
let _hsla:HSLA = rgb.into();
let _hsv:HSV = rgb.into();
let _cmyk:CMYK = rgb.into();
RGBA
RGBA可以从格式为"rgba(r,g,b,a)"的字符串或从元组(r,g,b,a)中解析
- r:u8 - 红色值(0~255)
- g:u8 - 绿色值(0~255)
- b:u8 - 蓝色值(0~255)
- a:f32 - 透明度(0~1)
let mut rgba:RGBA = "rgba(125,60,98,0.8)".try_into().unwrap();
rgba.set_alpha(0.5);
assert_eq!(rgba.to_string(), "rgba(125,60,98,0.50)");
let rgba:RGBA = (125,60,240,0.5).try_into().unwrap();
let hsl:HSL = rgba.into();
assert_eq!(hsl.to_string(), "hsl(262,85%,79%)");
它还可以转换为其他类型。
HSL
HSL可以从格式为"hsl(h, s%, l%)"的字符串或从元组(h,s,l)中解析
- h:u32 - 色调(0~360)
- s:u32 - 饱和度(0~100)
- l:u32 - 亮度(0~100)
let mut hsl:HSL = "hsl(262,85%,79%)".try_into().unwrap();
hsl.set_lightness(50);
assert_eq!(hsl.to_string(), "hsl(262,85%,50%)");
let hsl:HSL = (125,60,75).try_into().unwrap();
let rgb:RGB = hsl.into();
assert_eq!(rgb.to_string(), "rgb(153,229,159)")
HSLA
HSLA可以从格式为"hsla(h, s%, l%, a)"的字符串或从元组(h,s,l,a)中解析
- h:u32 - 色调(0~360)
- s:u32 - 饱和度(0~100)
- l:u32 - 亮度(0~100)
- a:f32 - 透明度(0~1)
let mut hsla:HSLA = "hsla(262,85%,79%, 0.7)".try_into().unwrap();
hsla.set_alpha(0.5);
assert_eq!(hsla.to_string(), "hsla(262,85%,79%,0.50)");
let hsla:HSLA = (125,60,75,0.6).try_into().unwrap();
let rgba:RGBA = hsla.into();
assert_eq!(rgba.to_string(), "rgba(153,229,159,0.60)");
HSV
HSV可以从格式为"hsl(h, s%, v%)"的字符串或从元组(h,s,v)中解析。
- h:u32 - 色调(0~360)
- s:u32 - 饱和度(0~100)
- v:u32 - 价值(0~100)
use easy_color::{RGB, HSV};
let mut hsv:HSV = "hsv(262,85%,79%)".try_into().unwrap();
hsv.set_value(50);
assert_eq!(hsv.to_string(), "hsv(262,85%,50%)");
let hsv:HSV = (125,60,75).try_into().unwrap();
assert_eq!(hsv.to_rgb().to_string(), "rgb(76,191,86)");
CMYK
CMYK可以从格式为"cmyk(c,m,y,k)"的字符串或从元组(c,m,y,k)中解析。
- c:u8 - 青色值(0~100)
- m:u8 - 品红色值(0~100)
- y:u8 - 黄色值(0~100)
- k:u8 - 黑色值(0~100)
use easy_color::{Hex, CMYK};
let mut cmyk:CMYK = "cmyk(77,34,53,38)".try_into().unwrap();
cmyk.set_cyan(100);
assert_eq!(cmyk.to_string(), "cmyk(100,34,53,38)");
let cmyk:CMYK = (100,34,53,38).try_into().unwrap();
assert_eq!(cmyk.to_hex().to_string(), "#00684A");
方法
每种结构类型都有以下方法
fn is_dark(&self) -> bool;
fn is_light(&self) -> bool;
fn grayscale(&self) -> Self;
fn negate(&self) -> Self;
fn mix(&self, other:T, weight:Option<f32>) -> Self;
fn darken(&mut self, ratio:f32) -> Self;
fn lighten(&mut self, ratio:f32) -> Self;
依赖项
~310KB