I needed color parsing for my JavaScript colorpicker. I couldn’t find many small frameworks that handled exactly what I wanted, though. So I wrote my own color parsing library and called it TinyColor.

Part of what makes it cool is that it packs a lot of features in a small footprint – it clocks in at 8.98KB (3.41KB gzipped). Read on for more details.

Color Conversion Features

TinyColor makes is easy to switch to and from the following formats:

  • RGB to HSV, RGB to HSL, RGB to Hex, RGB to Named.
  • HSV to RGB, HSV to HSL, HSV to Hex, HSV to Named
  • HSL to RGB, HSL to HSV, HSL to Hex, HSV to Named
  • Hex to RGB, Hex to HSV, Hex to HSL, Hex to Named
  • Named to RGB, Named to HSV, Named to HSL, Named to Hex

Note: The color name list was taken from http://www.w3.org/TR/css3-color/#svg-color.

var t = tinycolor("red");
t.toHex() // "ff0000"
t.toHexString() // "#ff0000"
t.toRgb() // {"r":255,"g":0,"b":0} or {"r":255,"g":0,"b":0,"a":0.5}
t.toRgbString() // "rgb(255, 0, 0)" or "rgba(255, 0, 0, 0.5)"
t.toHsv() // {"h":0,"s":1,"v":1}
t.toHsvString() // "hsv(0, 100%, 100%)"
t.toHsl() // {"h":0,"s":1,"l":0.5}
t.toHslString() // "hsl(0, 100%, 50%)"
t.toName() // "red"

Input strings recognized

TinyColor is exceptionally liberal in the string input it accepts. You can use (or omit) parenthesis or commas; you can use percentages, 0-1 ratios, 0-255.

rgb(255, , )
rgb 255
hsl(, 100, 50)
hsl(, 100%, 50%)
hsl  100 50
hsl  100% 50%
hsv(, 100%, 100%)
hsv(, 100, 100)
hsv  100% 100%
hsv  100 100

Color Manipulation

There is some support for color manipulation

  • desaturate
  • saturate
  • greyscale
  • lighten
  • darken
  • complement

Scheme generation and Color Combinations

There is support for generating color schemes using basic combinations

  • triad
  • tetrad
  • splitcomplement
  • analogous
  • monochromatic

Is One Color Readable On Another

TinyColor can tell you if one color is readable on another

tinycolor.readable("white", "black"); // true

Sidenote: I tried out the docco project for annotating the source code in this project. The results are here: TinyColor annotated source code. It is pretty awesome how easy it is to get such nice looking output (and it made me be a little more thoughtful about documenting the internal functionality of the framework).