Construction and Conversion

Available colorspaces

The colorspaces used by Colors are defined in ColorTypes. Briefly, the defined spaces are:

  • Red-Green-Blue spaces: RGB, BGR, XRGB, RGBX, RGB24, plus transparent versions ARGB, RGBA, ABGR, BGRA, and ARGB32.

  • HSV, HSL, HSI, plus all 6 transparent variants (AHSV, HSVA, AHSL, HSLA, AHSI, HSIA)

  • XYZ, xyY, LMS and all 6 transparent variants

  • Lab, Luv, LCHab, LCHuv and all 8 transparent variants

  • DIN99, DIN99d, DIN99o and all 6 transparent variants

  • Storage formats YIQ, YCbCr and their transparent variants

  • Gray, Gray24, and the transparent variants AGray, GrayA, and AGray32.

Color Parsing

You can parse any CSS color specification with the exception of currentColor. You can construct colors from strings using the @colorant_str macro and the parse function.

julia> using Colors

julia> colorant"red" # named color
RGB{N0f8}(1.0,0.0,0.0)

julia> parse(Colorant, "DeepSkyBlue") # color names are case-insensitive
RGB{N0f8}(0.0,0.749,1.0)

julia> colorant"#FF0000" # 6-digit hex notation
RGB{N0f8}(1.0,0.0,0.0)

julia> colorant"#f00" # 3-digit hex notation
RGB{N0f8}(1.0,0.0,0.0)

julia> colorant"rgb(255,0,0)" # rgb() notation with integers in [0, 255]
RGB{N0f8}(1.0,0.0,0.0)

julia> colorant"rgba(255,0,0,0.6)" # with alpha in [0, 1]
RGBA{N0f8}(1.0,0.0,0.0,0.6)

julia> colorant"rgba(100%,80%,0%,0.6)" # with "integer" percentages
RGBA{N0f8}(1.0,0.8,0.0,0.6)

julia> parse(ARGB, "rgba(255,0,0,0.6)") # you can specify the return type
ARGB{N0f8}(1.0,0.0,0.0,0.6)

julia> colorant"hsl(120, 100%, 25%)" # hsl() notation
HSL{Float32}(120.0f0,1.0f0,0.25f0)

julia> colorant"hsla(120, 100%, 25%, 0.6)" # hsla() notation
HSLA{Float32}(120.0f0,1.0f0,0.25f0,0.6f0)

julia> colorant"transparent" # transparent "black"
RGBA{N0f8}(0.0,0.0,0.0,0.0)

All CSS/SVG named colors are supported, in addition to X11 named colors, when their definitions do not clash with SVG. You can find all names and their color swatches in Named Colors page.

When writing functions the colorant"red" version is preferred, because the slow step runs when the code is parsed (i.e., during compilation rather than run-time).

The element types of the return types depend on the colorspaces, i.e. the hsl() and hsla() notations return HSL/HSLA colors with Float32 elements, and other notations return RGB/RGBA colors with N0f8 elements. The result colors can be converted to RGB{N0f16} (for example) using:

julia> using FixedPointNumbers

julia> RGB{N0f16}(colorant"indianred")
RGB{N0f16}(0.80392,0.36078,0.36078)

or

julia> parse(RGB{N0f16}, "indianred")
RGB{N0f16}(0.80392,0.36078,0.36078)

You can also pass a color (Colorant value) to the second argument of the parse function, but in this case, parse does not apply any conversion on the color.

julia> parse(RGB{N0f8}, HSL{Float64}(120, 1, 0.5)) # use `convert` instead
HSL{Float64}(120.0,1.0,0.5)

You can convert colors to hexadecimal strings using the hex function. Note that the conversion result does not have the prefix "#".

julia> color = colorant"#C0FFEE"
RGB{N0f8}(0.753,1.0,0.933)

julia> hex(color)
"C0FFEE"

Color Conversions

Colors.jl allows you to convert from one colorspace to another using the convert function.

For example:

julia> convert(RGB, HSL(270, 0.5, 0.5)) # without the element type
RGB{Float64}(0.5,0.25,0.75)

julia> convert(RGB{N0f8}, HSL(270, 0.5, 0.5)) # with the element type
RGB{N0f8}(0.502,0.251,0.749)

Depending on the source and destination colorspace, this may not be perfectly lossless.


Base.parseFunction
parse(Colorant, desc)

Parse a color description.

This parses a subset of HTML/CSS color specifications. In particular, everything is supported but: currentColor.

It does support named colors (though it uses X11 named colors, which are slightly different than W3C named colors in some cases), rgb(), hsl(), #RGB, and #RRGGBB syntax.

Arguments

  • Colorant: literal Colorant
  • desc: color name or description

A literal Colorant will parse according to the desc string (usually returning an RGB); any more specific choice will return a color of the specified type.

Returns

  • an RGB{N0f8} color, or

  • an HSL color if hsl(h, s, l) was used

  • an RGBA color if rgba(r, g, b, a) was used

  • an HSLA color if hsla(h, s, l, a) was used

  • an ARGB{N0f8} color if 0xAARRGGBB/0xARGB was used

  • a specific Colorant type as specified in the first argument

Note for X11 named colors

The X11 color names with spaces (e.g. "sea green") are not recommended because they are not allowed in the SVG/CSS.

Note for hex notations

You can parse not only the CSS-style hex notations #RRGGBB/#RGB, but also 0xRRGGBB/0xRGB.

You can also parse the 8-digit or 4-digit hex notation into an RGB color with alpha. However, the result depends on the prefix (i.e. # or 0x).

julia> parse(Colorant, "#FF8800AA") # transparent orange
RGBA{N0f8}(1.0,0.533,0.0,0.667)

julia> parse(Colorant, "0xFF8800AA") # opaque purple
ARGB{N0f8}(0.533,0.0,0.667,1.0)
Colors.hexFunction
hex(c::Colorant)
hex(c::Colorant, style::Symbol)

Convert a color to a hexadecimal string, optionally specifying its style.

Arguments

  • c: a target color.
  • style: a symbol to specify the hexadecimal notation. Spesifying the uppercase symbols means the return values are in uppercase. The following symbols are available:
    • :AUTO: notation automatically selected according to the type of c
    • :RRGGBB/:rrggbb: 6-digit opaque notation
    • :AARRGGBB/:aarrggbb: 8-digit notation with alpha at the head
    • :RRGGBBAA/:rrggbbaa: 8-digit notation with alpha at the tail
    • :RGB/:rgb/:ARGB/:argb/:RGBA/:rgba: 3-digit or 4-digit noatation
    • :S/:s: short notation if available

Examples

julia> hex(RGB(1,0.5,0))
"FF8000"

julia> hex(ARGB(1,0.5,0,0.25))
"40FF8000"

julia> hex(HSV(30,1.0,1.0), :AARRGGBB)
"FFFF8000"

julia> hex(ARGB(1,0.533,0,0.267), :rrggbbaa)
"ff880044"

julia> hex(ARGB(1,0.533,0,0.267), :rgba)
"f804"

julia> hex(ARGB(1,0.533,0,0.267), :S)
"4F80"
Colors v0.12

style requires at least Colors v0.12.

Compat

For backward compatibility, hex(c::ColorAlpha) currently returns an "AARRGGBB" style string. This is inconsistent with hex(c, :AUTO) returning an "RRGGBBAA" style string. The alpha position for ColorAlpha will soon be changed to the tail.

Colors.normalize_hueFunction
normalize_hue(h::Real)
normalize_hue(c::Colorant)

Returns a normalized (wrapped-around) hue angle, or a color with the normalized hue, in degrees, in [0, 360]. The normalization is essentially equivalent to mod(h, 360), but is faster at the expense of some accuracy.