All Projects → emgyrz → colorsys.rs

emgyrz / colorsys.rs

Licence: MIT License
Lib for modifying colors and converting to other spaces

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to colorsys.rs

ColorHelper
No description or website provided.
Stars: ✭ 34 (+21.43%)
Mutual labels:  hex, color, hsl, rgb, cmyk
tc-lib-color
PHP library to manipulate various color representations
Stars: ✭ 19 (-32.14%)
Mutual labels:  color, hsl, rgb, cmyk
Values.js
🍇 Get the tints and shades of a color
Stars: ✭ 97 (+246.43%)
Mutual labels:  hex, color, hsl, rgb
ColorMinePortable
ColorMinePortable
Stars: ✭ 37 (+32.14%)
Mutual labels:  hex, hsl, rgb, cmyk
color
A library of well-tested helper methods for working with colors.
Stars: ✭ 13 (-53.57%)
Mutual labels:  hex, color, hsl, rgb
Culori
A comprehensive color library for JavaScript.
Stars: ✭ 271 (+867.86%)
Mutual labels:  hex, color, hsl, rgb
Colorhighlight
🎨 Lightweight Color Highlight colorizer for Sublime Text
Stars: ✭ 76 (+171.43%)
Mutual labels:  hex, color, hsl, rgb
colorsys
🎨 Minimalistic color converter for RGB, HSV, HSL, CMYK, HEX and CSS strings
Stars: ✭ 53 (+89.29%)
Mutual labels:  hex, color, rgb, cmyk
khroma
A collection of functions for manipulating CSS colors, inspired by SASS.
Stars: ✭ 28 (+0%)
Mutual labels:  hex, color, hsl, rgb
vscode-color
Helper with GUI to generate color codes such as CSS color notations.
Stars: ✭ 88 (+214.29%)
Mutual labels:  hex, hsl, rgb, cmyk
Farge
🎈Tell the name of hex color
Stars: ✭ 23 (-17.86%)
Mutual labels:  hex, color, hsl, rgb
colors-convert
🦚 A simple colors library
Stars: ✭ 15 (-46.43%)
Mutual labels:  hex, hsl, rgb, cmyk
Gradstop
JavaScript micro library to generate gradient color stops 🏳️‍🌈
Stars: ✭ 144 (+414.29%)
Mutual labels:  hex, hsl, rgb
Color
A little library to deal with color conversions
Stars: ✭ 166 (+492.86%)
Mutual labels:  hex, color, rgb
ColorTranslator
A JavaScript library, written in TypeScript, to convert among different color models
Stars: ✭ 34 (+21.43%)
Mutual labels:  color, hsl, rgb
Xcodecolorsense
🎈 An Xcode plugin that makes working with color easier
Stars: ✭ 79 (+182.14%)
Mutual labels:  hex, color, rgb
Colorpicker
A mininal but complete colorpicker desktop app
Stars: ✭ 766 (+2635.71%)
Mutual labels:  hex, color, rgb
Alfred-Colors-workflow
hex <=> rgb <=> hsl
Stars: ✭ 28 (+0%)
Mutual labels:  hex, hsl, rgb
andColorPicker
Color picker library for Android
Stars: ✭ 233 (+732.14%)
Mutual labels:  hsl, rgb, cmyk
React Color Extractor
A React component which extracts colors from an image
Stars: ✭ 314 (+1021.43%)
Mutual labels:  hex, hsl, rgb

colorsys

Crates.io

A module for color conversion and mutation written in Rust. For now works with next color models:

  • RGB(a)( as hexadecimal too)
  • HSL(a)
  • CMYK(a)
  • ANSI256 codes

Documentation

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_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));

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
  • all in cmyk are: 0.0 - 100.0
  • alpha: 0.0 - 1.0
  • ansi256 code is u8

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

Enjoy using!

License

This module is MIT licensed.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].