Crate colorsys

Source
Expand description

A module for color conversion and mutation written in Rust. For now works with RGB(a)( as hexadecimal too), HSL(a) color models

§What It Can Do

§getters & setters
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 }
§conversion

See From/FromStr/Into traits implementation in docs for more info

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_arr) ).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::<[u16; 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));
§modification

See ColorTransform/Add*/Sub*.. traits in docs for more

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 }
§parsing from string & css string representation
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 has a Cargo feature named "std" that is enabled by default. In order to use colorsys in a no_std context this feature needs to be disabled. Modify your dependency to opt out of enabled-by-default features.

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

§Color unit ranges

All color units is f64. Here are their ranges:

  • red - 0.0 .. 255.0
  • green - 0.0 .. 255.0
  • blue - 0.0 .. 255.0
  • hue - 0.0 .. 360.0
  • saturation - 0.0 .. 100.0
  • lightness - 0.0 .. 100.0
  • alpha - 0.0 .. 1.0

If you specify a value that does not fit within these ranges, they are replaced with a minimum or maximum value.

Modules§

prelude
ratio_converters

Structs§

Ansi256
Predefined set of 256 colors to use with ANSI escape sequences, e.g. in terminal emulators
Cmyk
The CMYK color model.
CmykRatio
Hsl
The HSL or HSI (hue, saturation, lightness (intensity)) color model
HslRatio
Hsl representation as ratio (from 0.0 to 1.0). Cannot be modified, added, subtracted, etc. Can be converted to Hsl and vice versa. Used for compatibility in various libraries.
ParseError
Rgb
The RGB color model.
RgbRatio
Rgb representation as ratio (from 0.0 to 1.0). Cannot be modified, added, subtracted, etc. Can be converted to Rgb and vice versa. Used for compatibility in various libraries.

Enums§

GrayScaleMethod
SaturationInSpace

Statics§

DEFAULT_APPROX_EQ_PRECISION
Default precision used for color comparison. It is 0.000_000_001

Traits§

ApproxEq
Methods to compare two colors
ColorAlpha
Methods to work with alpha channel in color.
ColorTransform
A collection of methods to some special modification of color. Some methods (like saturate, lighten, etc.) requires (inside implementation) converting to another color space and vice versa.

Type Aliases§

ColorTuple
Use to transfer and collect color values. May be for example ($red,$green,$blue) or ($hue,$saturation,$value)
ColorTupleA
For example ($hue,$saturation,$lightness,$alpha)