Documentation ¶
Overview ¶
The colorful package provides all kinds of functions for working with colors.
Index ¶
- Constants
- Variables
- func HPLuvToLuvLCh(h, s, l float64) (float64, float64, float64)
- func HSLuvToLuvLCh(h, s, l float64) (float64, float64, float64)
- 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 LuvLChToHPLuv(l, c, h float64) (float64, float64, float64)
- func LuvLChToHSLuv(l, c, h float64) (float64, float64, float64)
- func LuvLChToLuv(l, c, h float64) (L, u, v float64)
- func LuvToLuvLCh(L, u, v float64) (l, c, h 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 HPLuv(h, s, l float64) Color
- func HSLuv(h, s, l float64) 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 LuvLCh(l, c, h float64) Color
- func LuvLChWhiteRef(l, c, h float64, wref [3]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 Sorted(cs []Color) []Color
- 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) BlendLinearRgb(c2 Color, t float64) Color
- func (c1 Color) BlendLuv(c2 Color, t float64) Color
- func (col1 Color) BlendLuvLCh(col2 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) DistanceHPLuv(c2 Color) float64
- func (c1 Color) DistanceHSLuv(c2 Color) float64
- func (c1 Color) DistanceLab(c2 Color) float64
- func (c1 Color) DistanceLinearRGB(c2 Color) float64
- func (c1 Color) DistanceLinearRgb(c2 Color) float64
- func (c1 Color) DistanceLuv(c2 Color) float64
- func (c1 Color) DistanceRgb(c2 Color) float64
- func (c1 Color) DistanceRiemersma(c2 Color) float64
- func (col Color) FastLinearRgb() (r, g, b float64)
- func (col Color) HPLuv() (h, s, l float64)
- func (col Color) HSLuv() (h, s, l 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) LuvLCh() (l, c, h float64)
- func (col Color) LuvLChWhiteRef(wref [3]float64) (l, c, h 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
- func (hc *HexColor) Decode(hexCode string) error
- func (hc HexColor) MarshalJSON() ([]byte, error)
- func (hc HexColor) MarshalYAML() (interface{}, error)
- func (hc *HexColor) Scan(value interface{}) error
- func (hc *HexColor) UnmarshalJSON(data []byte) error
- func (hc *HexColor) UnmarshalYAML(unmarshal func(interface{}) error) error
- func (hc *HexColor) Value() (driver.Value, error)
- type SoftPaletteSettings
Constants ¶
const Delta = 1.0 / 255.0
Delta 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}
D50 And another one.
var D65 = [3]float64{0.95047, 1.00000, 1.08883}
D65 This is the default reference white point.
Functions ¶
func LabToXyzWhiteRef ¶
LabToXyzWhiteRef func
func LuvToXyzWhiteRef ¶
LuvToXyzWhiteRef func
func XyzToLabWhiteRef ¶
XyzToLabWhiteRef func
func XyzToLinearRgb ¶
XyzToLinearRgb converts from CIE XYZ-space to Linear RGB space.
func XyzToLuvWhiteRef ¶
XyzToLuvWhiteRef func
func XyzToXyy ¶
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 ¶
XyzToXyyWhiteRef func
Types ¶
type Color ¶
type Color struct {
R, G, B float64
}
Color A color is stored internally using sRGB (standard RGB) values in the range 0-1
func FastHappyColor ¶
func FastHappyColor() Color
FastHappyColor Creates a random bright, "pimpy" color through a restricted HSV space.
func FastHappyPalette ¶
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
FastWarmColor Creates a random dark, "warm" color through a restricted HSV space.
func FastWarmPalette ¶
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 HPLuv ¶
HPLuv creates a new Color from values in the HPLuv color space. Hue in [0..360], a Saturation [0..1], and a Luminance (lightness) in [0..1].
The returned color values are clamped (using .Clamped), so this will never output an invalid color.
func HSLuv ¶
HSLuv creates a new Color from values in the HSLuv color space. Hue in [0..360], a Saturation [0..1], and a Luminance (lightness) in [0..1].
The returned color values are clamped (using .Clamped), so this will never output an invalid color.
func HappyColor ¶
func HappyColor() (c Color)
HappyColor 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 Hcl ¶
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 `h`, `c`, and `l` values do not have corresponding valid RGB values, check the FAQ in the README if you're unsure.
func HclWhiteRef ¶
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 ¶
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 ¶
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 ¶
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`, `u`, and `v` values do not have corresponding valid RGB values, check the FAQ in the README if you're unsure.
func LuvLCh ¶
LuvLCh Generates a color by using data given in LuvLCh 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`, `c`, and `h` values do not have corresponding valid RGB values, check the FAQ in the README if you're unsure.
func LuvLChWhiteRef ¶
LuvLChWhiteRef Generates a color by using data given in LuvLCh 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 LuvWhiteRef ¶
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)
SoftPaletteEx 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 Sorted ¶
Sorted sorts a list of Color values. Sorting is not a well-defined operation for colors so the intention here primarily is to order colors so that the transition from one to the next is fairly smooth.
func WarmColor ¶
func WarmColor() (c Color)
WarmColor 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 ¶
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 ¶
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) BlendLinearRgb ¶
BlendLinearRgb blends two colors in the Linear RGB color-space. Unlike BlendRgb, this will not produce dark color around the center. 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) BlendLuvLCh ¶
BlendLuvLCh blends two colors in the cylindrical CIELUV color space. t == 0 results in c1, t == 1 results in c2
func (Color) BlendRgb ¶
BlendRgb You don't really want to use this, do you? Go for BlendLab, BlendLuv or BlendHcl.
func (Color) Clamped ¶
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 ¶
DistanceCIE76 is the same as DistanceLab.
func (Color) DistanceCIE94 ¶
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) DistanceHPLuv ¶
DistanceHPLuv calculates Euclidean distance in the HPLuv colorspace. No idea how useful this is.
The Hue value is divided by 100 before the calculation, so that H, S, and L have the same relative ranges.
func (Color) DistanceHSLuv ¶
DistanceHSLuv calculates Euclidan distance in the HSLuv colorspace. No idea how useful this is.
The Hue value is divided by 100 before the calculation, so that H, S, and L have the same relative ranges.
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) DistanceLinearRGB ¶
DistanceLinearRGB is deprecated in favour of DistanceLinearRgb. They do the exact same thing.
func (Color) DistanceLinearRgb ¶
DistanceLinearRgb computes the distance between two colors in linear RGB space. This is not useful for measuring how humans perceive color, but might be useful for other things, like dithering.
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) DistanceRiemersma ¶
DistanceRiemersma is a color distance algorithm developed by Thiadmer Riemersma. It uses RGB coordinates, but he claims it has similar results to CIELUV. This makes it both fast and accurate.
Sources:
https://www.compuphase.com/cmetric.htm https://github.com/lucasb-eyer/go-colorful/issues/52
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) HPLuv ¶
HPLuv returns the Hue, Saturation and Luminance of the color in the HSLuv color space. Hue in [0..360], a Saturation [0..1], and a Luminance (lightness) in [0..1].
Note that HPLuv can only represent pastel colors, and so the Saturation value could be much larger than 1 for colors it can't represent.
func (Color) HSLuv ¶
HSLuv returns the Hue, Saturation and Luminance of the color in the HSLuv color space. Hue in [0..360], a Saturation [0..1], and a Luminance (lightness) in [0..1].
func (Color) Hcl ¶
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 ¶
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) IsValid ¶
IsValid Checks whether the color exists in RGB space, i.e. all values are in [0..1]
func (Color) LabWhiteRef ¶
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 ¶
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) LuvLCh ¶
LuvLCh Converts the given color to LuvLCh 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) LuvLChWhiteRef ¶
LuvLChWhiteRef Converts the given color to LuvLCh 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) LuvWhiteRef ¶
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 ¶
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 ¶
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, database/sql/driver.Value, encoding/json.Unmarshaler and encoding/json.Marshaler interfaces.
func (*HexColor) Decode ¶
Decode - deserialize function for https://github.com/kelseyhightower/envconfig
func (HexColor) MarshalJSON ¶
func (HexColor) MarshalYAML ¶
func (*HexColor) UnmarshalJSON ¶
func (*HexColor) UnmarshalYAML ¶
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 }