增加向HCT颜色空间的双向转换。
This commit is contained in:
		| @@ -1,8 +1,11 @@ | ||||
| use std::str::FromStr; | ||||
|  | ||||
| use palette::{ | ||||
|     color_difference::Wcag21RelativeContrast, color_theory::*, convert::FromColorUnclamped, Darken, | ||||
|     FromColor, Hsl, IsWithinBounds, Lab, Lighten, Mix, Oklch, ShiftHue, Srgb, | ||||
|     cam16::{Cam16Jch, Parameters}, | ||||
|     color_difference::Wcag21RelativeContrast, | ||||
|     color_theory::*, | ||||
|     convert::FromColorUnclamped, | ||||
|     Darken, FromColor, Hsl, IntoColor, IsWithinBounds, Lab, Lighten, Mix, Oklch, ShiftHue, Srgb, | ||||
| }; | ||||
| use wasm_bindgen::prelude::*; | ||||
|  | ||||
| @@ -87,6 +90,31 @@ pub fn oklch_to_hex(l: f32, c: f32, h: f32) -> Result<String, errors::ColorError | ||||
|     Ok(format!("{:x}", srgb.into_format::<u8>())) | ||||
| } | ||||
|  | ||||
| #[wasm_bindgen] | ||||
| pub fn represent_hct(color: &str) -> Result<Box<[f32]>, errors::ColorError> { | ||||
|     let origin_color = Srgb::from_str(color) | ||||
|         .map_err(|_| errors::ColorError::UnrecogniazedRGB(color.to_string()))? | ||||
|         .into_format::<f32>(); | ||||
|     let extra_parameters = Parameters::default_static_wp(40.0); | ||||
|     let hct = Cam16Jch::from_xyz(origin_color.into_color(), extra_parameters); | ||||
|     Ok(Box::new([ | ||||
|         hct.hue.into_positive_degrees(), | ||||
|         hct.chroma, | ||||
|         hct.lightness, | ||||
|     ])) | ||||
| } | ||||
|  | ||||
| #[wasm_bindgen] | ||||
| pub fn hct_to_hex(hue: f32, chroma: f32, tone: f32) -> Result<String, errors::ColorError> { | ||||
|     let extra_parameters = Parameters::default_static_wp(40.0); | ||||
|     let hct = Cam16Jch::new(tone, chroma, hue); | ||||
|     let srgb = Srgb::from_color_unclamped(hct.into_xyz(extra_parameters)); | ||||
|     if !srgb.is_within_bounds() { | ||||
|         return Err(errors::ColorError::ComponentOutOfBounds); | ||||
|     } | ||||
|     Ok(format!("{:x}", srgb.into_format::<u8>())) | ||||
| } | ||||
|  | ||||
| #[wasm_bindgen] | ||||
| pub fn shift_hue(color: &str, degree: f32) -> Result<String, errors::ColorError> { | ||||
|     let origin_color = Srgb::from_str(color) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user