Documentation ¶
Overview ¶
The colorful package provides all kinds of functions for working with colors.
Index ¶
- Constants
- Variables
- func HclToLab(h, c, l float64) (L, a, b float64)
- func LabToHcl(L, a, b float64) (h, c, l float64)
- func LabToXyz(l, a, b float64) (x, y, z float64)
- func LabToXyzWhiteRef(l, a, b float64, wref [3]float64) (x, y, z float64)
- func LinearRgbToXyz(r, g, b float64) (x, y, z float64)
- func LuvToXyz(l, u, v float64) (x, y, z float64)
- func LuvToXyzWhiteRef(l, u, v float64, wref [3]float64) (x, y, z float64)
- func XyyToXyz(x, y, Y float64) (X, Yout, Z float64)
- func XyzToLab(x, y, z float64) (l, a, b float64)
- func XyzToLabWhiteRef(x, y, z float64, wref [3]float64) (l, a, b float64)
- func XyzToLinearRgb(x, y, z float64) (r, g, b float64)
- func XyzToLuv(x, y, z float64) (l, a, b float64)
- func XyzToLuvWhiteRef(x, y, z float64, wref [3]float64) (l, u, v float64)
- func XyzToXyy(X, Y, Z float64) (x, y, Yout float64)
- func XyzToXyyWhiteRef(X, Y, Z float64, wref [3]float64) (x, y, Yout float64)
- type Color
- func FastHappyColor() Color
- func FastHappyPalette(colorsCount int) (colors []Color)
- func FastLinearRgb(r, g, b float64) Color
- func FastWarmColor() Color
- func FastWarmPalette(colorsCount int) (colors []Color)
- func HappyColor() (c Color)
- func HappyPalette(colorsCount int) ([]Color, error)
- func Hcl(h, c, l float64) Color
- func HclWhiteRef(h, c, l float64, wref [3]float64) Color
- func Hex(scol string) (Color, error)
- func Hsl(h, s, l float64) Color
- func Hsv(H, S, V float64) Color
- func Lab(l, a, b float64) Color
- func LabWhiteRef(l, a, b float64, wref [3]float64) Color
- func LinearRgb(r, g, b float64) Color
- func Luv(l, u, v float64) Color
- func LuvWhiteRef(l, u, v float64, wref [3]float64) Color
- func MakeColor(col color.Color) (Color, bool)
- func SoftPalette(colorsCount int) ([]Color, error)
- func SoftPaletteEx(colorsCount int, settings SoftPaletteSettings) ([]Color, error)
- func WarmColor() (c Color)
- func WarmPalette(colorsCount int) ([]Color, error)
- func Xyy(x, y, Y float64) Color
- func Xyz(x, y, z float64) Color
- func (c1 Color) AlmostEqualRgb(c2 Color) bool
- func (col1 Color) BlendHcl(col2 Color, t float64) Color
- func (c1 Color) BlendHsv(c2 Color, t float64) Color
- func (c1 Color) BlendLab(c2 Color, t float64) Color
- func (c1 Color) BlendLuv(c2 Color, t float64) Color
- func (c1 Color) BlendRgb(c2 Color, t float64) Color
- func (c Color) Clamped() Color
- func (c1 Color) DistanceCIE76(c2 Color) float64
- func (cl Color) DistanceCIE94(cr Color) float64
- func (cl Color) DistanceCIEDE2000(cr Color) float64
- func (cl Color) DistanceCIEDE2000klch(cr Color, kl, kc, kh float64) float64
- func (c1 Color) DistanceLab(c2 Color) float64
- func (c1 Color) DistanceLuv(c2 Color) float64
- func (c1 Color) DistanceRgb(c2 Color) float64
- func (col Color) FastLinearRgb() (r, g, b float64)
- func (col Color) Hcl() (h, c, l float64)
- func (col Color) HclWhiteRef(wref [3]float64) (h, c, l float64)
- func (col Color) Hex() string
- func (col Color) Hsl() (h, s, l float64)
- func (col Color) Hsv() (h, s, v float64)
- func (c Color) IsValid() bool
- func (col Color) Lab() (l, a, b float64)
- func (col Color) LabWhiteRef(wref [3]float64) (l, a, b float64)
- func (col Color) LinearRgb() (r, g, b float64)
- func (col Color) Luv() (l, u, v float64)
- func (col Color) LuvWhiteRef(wref [3]float64) (l, u, v float64)
- func (col Color) RGB255() (r, g, b uint8)
- func (col Color) RGBA() (r, g, b, a uint32)
- func (col Color) Xyy() (x, y, Y float64)
- func (col Color) XyyWhiteRef(wref [3]float64) (x, y, Y float64)
- func (col Color) Xyz() (x, y, z float64)
- type HexColor
- type SoftPaletteSettings
Constants ¶
const Delta = 1.0 / 255.0
This is the tolerance used when comparing colors using AlmostEqualRgb.
const LAB_DELTA = 1e-6
Variables ¶
var D50 = [3]float64{0.96422, 1.00000, 0.82521}
And another one.
var D65 = [3]float64{0.95047, 1.00000, 1.08883}
This is the default reference white point.
Functions ¶
func LabToXyzWhiteRef ¶
func LinearRgbToXyz ¶
func LuvToXyzWhiteRef ¶
func XyzToLabWhiteRef ¶
func XyzToLinearRgb ¶
XyzToLinearRgb converts from CIE XYZ-space to Linear RGB space.
func XyzToLuvWhiteRef ¶
func XyzToXyy ¶
Well, the name is bad, since it's xyY but Golang needs me to start with a capital letter to make the method public.
func XyzToXyyWhiteRef ¶
Types ¶
type Color ¶
type Color struct {
R, G, B float64
}
A color is stored internally using sRGB (standard RGB) values in the range 0-1
func FastHappyColor ¶
func FastHappyColor() Color
Creates a random bright, "pimpy" color through a restricted HSV space.
func FastHappyPalette ¶
Uses the HSV color space to generate colors with similar S,V but distributed evenly along their Hue. This is fast but not always pretty. If you've got time to spare, use Lab (the non-fast below).
func FastLinearRgb ¶
FastLinearRgb is much faster than and almost as accurate as LinearRgb. BUT it is important to NOTE that they only produce good results for valid inputs r,g,b in [0,1].
func FastWarmColor ¶
func FastWarmColor() Color
Creates a random dark, "warm" color through a restricted HSV space.
func FastWarmPalette ¶
Uses the HSV color space to generate colors with similar S,V but distributed evenly along their Hue. This is fast but not always pretty. If you've got time to spare, use Lab (the non-fast below).
func HappyColor ¶
func HappyColor() (c Color)
Creates a random bright, "pimpy" color through restricted HCL space. This is slower than FastHappyColor but will likely give you colors which have the same "brightness" if you run it many times.
func HappyPalette ¶
func Hcl ¶
Generates a color by using data given in HCL space using D65 as reference white. H values are in [0..360], C and L values are in [0..1] WARNING: many combinations of `l`, `a`, and `b` values do not have corresponding
valid RGB values, check the FAQ in the README if you're unsure.
func HclWhiteRef ¶
Generates a color by using data given in HCL space, taking into account a given reference white. (i.e. the monitor's white) H values are in [0..360], C and L values are in [0..1]
func Hsl ¶
Hsl creates a new Color given a Hue in [0..360], a Saturation [0..1], and a Luminance (lightness) in [0..1]
func Lab ¶
Generates a color by using data given in CIE L*a*b* space using D65 as reference white. WARNING: many combinations of `l`, `a`, and `b` values do not have corresponding
valid RGB values, check the FAQ in the README if you're unsure.
func LabWhiteRef ¶
Generates a color by using data given in CIE L*a*b* space, taking into account a given reference white. (i.e. the monitor's white)
func LinearRgb ¶
LinearRgb creates an sRGB color out of the given linear RGB color (see http://www.sjbrown.co.uk/2004/05/14/gamma-correct-rendering/).
func Luv ¶
Generates a color by using data given in CIE L*u*v* space using D65 as reference white. L* is in [0..1] and both u* and v* are in about [-1..1] WARNING: many combinations of `l`, `a`, and `b` values do not have corresponding
valid RGB values, check the FAQ in the README if you're unsure.
func LuvWhiteRef ¶
Generates a color by using data given in CIE L*u*v* space, taking into account a given reference white. (i.e. the monitor's white) L* is in [0..1] and both u* and v* are in about [-1..1]
func SoftPalette ¶
A wrapper which uses common parameters.
func SoftPaletteEx ¶
func SoftPaletteEx(colorsCount int, settings SoftPaletteSettings) ([]Color, error)
Yeah, windows-stype Foo, FooEx, screw you golang... Uses K-means to cluster the color-space and return the means of the clusters as a new palette of distinctive colors. Falls back to K-medoid if the mean happens to fall outside of the color-space, which can only happen if you specify a CheckColor function.
func WarmColor ¶
func WarmColor() (c Color)
Creates a random dark, "warm" color through restricted HCL space. This is slower than FastWarmColor but will likely give you colors which have the same "warmness" if you run it many times.
func WarmPalette ¶
func (Color) AlmostEqualRgb ¶
Check for equality between colors within the tolerance Delta (1/255).
func (Color) BlendHcl ¶
BlendHcl blends two colors in the CIE-L*C*h° color-space, which should result in a smoother blend. t == 0 results in c1, t == 1 results in c2
func (Color) BlendHsv ¶
You don't really want to use this, do you? Go for BlendLab, BlendLuv or BlendHcl.
func (Color) BlendLab ¶
BlendLab blends two colors in the L*a*b* color-space, which should result in a smoother blend. t == 0 results in c1, t == 1 results in c2
func (Color) BlendLuv ¶
BlendLuv blends two colors in the CIE-L*u*v* color-space, which should result in a smoother blend. t == 0 results in c1, t == 1 results in c2
func (Color) BlendRgb ¶
You don't really want to use this, do you? Go for BlendLab, BlendLuv or BlendHcl.
func (Color) Clamped ¶
Returns Clamps the color into valid range, clamping each value to [0..1] If the color is valid already, this is a no-op.
func (Color) DistanceCIE76 ¶
That's actually the same, but I don't want to break code.
func (Color) DistanceCIE94 ¶
Uses the CIE94 formula to calculate color distance. More accurate than DistanceLab, but also more work.
func (Color) DistanceCIEDE2000 ¶
DistanceCIEDE2000 uses the Delta E 2000 formula to calculate color distance. It is more expensive but more accurate than both DistanceLab and DistanceCIE94.
func (Color) DistanceCIEDE2000klch ¶
DistanceCIEDE2000klch uses the Delta E 2000 formula with custom values for the weighting factors kL, kC, and kH.
func (Color) DistanceLab ¶
DistanceLab is a good measure of visual similarity between two colors! A result of 0 would mean identical colors, while a result of 1 or higher means the colors differ a lot.
func (Color) DistanceLuv ¶
DistanceLuv is a good measure of visual similarity between two colors! A result of 0 would mean identical colors, while a result of 1 or higher means the colors differ a lot.
func (Color) DistanceRgb ¶
DistanceRgb computes the distance between two colors in RGB space. This is not a good measure! Rather do it in Lab space.
func (Color) FastLinearRgb ¶
FastLinearRgb is much faster than and almost as accurate as LinearRgb. BUT it is important to NOTE that they only produce good results for valid colors r,g,b in [0,1].
func (Color) Hcl ¶
Converts the given color to HCL space using D65 as reference white. H values are in [0..360], C and L values are in [0..1] although C can overshoot 1.0
func (Color) HclWhiteRef ¶
Converts the given color to HCL space, taking into account a given reference white. (i.e. the monitor's white) H values are in [0..360], C and L values are in [0..1]
func (Color) Hsl ¶
Hsl returns the Hue [0..360], Saturation [0..1], and Luminance (lightness) [0..1] of the color.
func (Color) LabWhiteRef ¶
Converts the given color to CIE L*a*b* space, taking into account a given reference white. (i.e. the monitor's white)
func (Color) LinearRgb ¶
LinearRgb converts the color into the linear RGB space (see http://www.sjbrown.co.uk/2004/05/14/gamma-correct-rendering/).
func (Color) Luv ¶
Converts the given color to CIE L*u*v* space using D65 as reference white. L* is in [0..1] and both u* and v* are in about [-1..1]
func (Color) LuvWhiteRef ¶
Converts the given color to CIE L*u*v* space, taking into account a given reference white. (i.e. the monitor's white) L* is in [0..1] and both u* and v* are in about [-1..1]
func (Color) Xyy ¶
Converts the given color to CIE xyY space using D65 as reference white. (Note that the reference white is only used for black input.) x, y and Y are in [0..1]
func (Color) XyyWhiteRef ¶
Converts the given color to CIE xyY space, taking into account a given reference white. (i.e. the monitor's white) (Note that the reference white is only used for black input.) x, y and Y are in [0..1]
type HexColor ¶
type HexColor Color
A HexColor is a Color stored as a hex string "#rrggbb". It implements the database/sql.Scanner and database/sql/driver.Value interfaces.
type SoftPaletteSettings ¶
type SoftPaletteSettings struct { // A function which can be used to restrict the allowed color-space. CheckColor func(l, a, b float64) bool // The higher, the better quality but the slower. Usually two figures. Iterations int // Use up to 160000 or 8000 samples of the L*a*b* space (and thus calls to CheckColor). // Set this to true only if your CheckColor shapes the Lab space weirdly. ManySamples bool }