package colorful

Import Path
	github.com/lucasb-eyer/go-colorful (on go.dev)

Dependency Relation
	imports 7 packages, and imported by 3 packages

Involved Source Files colorgens.go The colorful package provides all kinds of functions for working with colors. happy_palettegen.go hexcolor.go hsluv.go soft_palettegen.go warm_palettegen.go
Package-Level Type Names (total 3)
/* sort by: | */
A color is stored internally using sRGB (standard RGB) values in the range 0-1 B float64 G float64 R float64 Check for equality between colors within the tolerance Delta (1/255). 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 You don't really want to use this, do you? Go for BlendLab, BlendLuv or BlendHcl. 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 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 BlendLuvLCh blends two colors in the cylindrical CIELUV color space. t == 0 results in c1, t == 1 results in c2 You don't really want to use this, do you? Go for BlendLab, BlendLuv or BlendHcl. Returns Clamps the color into valid range, clamping each value to [0..1] If the color is valid already, this is a no-op. DistanceCIE76 is the same as DistanceLab. Uses the CIE94 formula to calculate color distance. More accurate than DistanceLab, but also more work. DistanceCIEDE2000 uses the Delta E 2000 formula to calculate color distance. It is more expensive but more accurate than both DistanceLab and DistanceCIE94. DistanceCIEDE2000klch uses the Delta E 2000 formula with custom values for the weighting factors kL, kC, and kH. 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. 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. 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. 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. 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. DistanceRgb computes the distance between two colors in RGB space. This is not a good measure! Rather do it in Lab space. 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]. 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. 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]. 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 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] Hex returns the hex "html" representation of the color, as in #ff0080. Hsl returns the Hue [0..360], Saturation [0..1], and Luminance (lightness) [0..1] of the color. Hsv returns the Hue [0..360], Saturation and Value [0..1] of the color. Checks whether the color exists in RGB space, i.e. all values are in [0..1] Converts the given color to CIE L*a*b* space using D65 as reference white. Converts the given color to CIE L*a*b* space, taking into account a given reference white. (i.e. the monitor's white) LinearRgb converts the color into the linear RGB space (see http://www.sjbrown.co.uk/2004/05/14/gamma-correct-rendering/). 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] 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 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] 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] Might come in handy sometimes to reduce boilerplate code. Implement the Go color.Color interface. 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] 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] ( Color) Xyz() (x, y, z float64) Color : database/sql/driver.Validator Color : image/color.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 HPLuv(h, s, l float64) Color func Hsl(h, s, l float64) Color func HSLuv(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 WarmColor() (c Color) func WarmPalette(colorsCount int) ([]Color, error) func Xyy(x, y, Y float64) Color func Xyz(x, y, z float64) Color func Color.BlendHcl(col2 Color, t float64) Color func Color.BlendHsv(c2 Color, t float64) Color func Color.BlendLab(c2 Color, t float64) Color func Color.BlendLuv(c2 Color, t float64) Color func Color.BlendLuvLCh(col2 Color, t float64) Color func Color.BlendRgb(c2 Color, t float64) Color func Color.Clamped() Color func Color.AlmostEqualRgb(c2 Color) bool func Color.BlendHcl(col2 Color, t float64) Color func Color.BlendHsv(c2 Color, t float64) Color func Color.BlendLab(c2 Color, t float64) Color func Color.BlendLuv(c2 Color, t float64) Color func Color.BlendLuvLCh(col2 Color, t float64) Color func Color.BlendRgb(c2 Color, t float64) Color func Color.DistanceCIE76(c2 Color) float64 func Color.DistanceCIE94(cr Color) float64 func Color.DistanceCIEDE2000(cr Color) float64 func Color.DistanceCIEDE2000klch(cr Color, kl, kc, kh float64) float64 func Color.DistanceHPLuv(c2 Color) float64 func Color.DistanceHSLuv(c2 Color) float64 func Color.DistanceLab(c2 Color) float64 func Color.DistanceLinearRGB(c2 Color) float64 func Color.DistanceLuv(c2 Color) float64 func Color.DistanceRgb(c2 Color) float64
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. B float64 G float64 R float64 Decode - deserialize function for https://github.com/kelseyhightower/envconfig ( HexColor) MarshalJSON() ([]byte, error) (*HexColor) Scan(value interface{}) error (*HexColor) UnmarshalJSON(data []byte) error (*HexColor) Value() (driver.Value, error) HexColor : github.com/goccy/go-json.Marshaler *HexColor : github.com/goccy/go-json.Unmarshaler *HexColor : database/sql.Scanner *HexColor : database/sql/driver.Valuer HexColor : encoding/json.Marshaler *HexColor : encoding/json.Unmarshaler
A function which can be used to restrict the allowed color-space. The higher, the better quality but the slower. Usually two figures. 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. func SoftPaletteEx(colorsCount int, settings SoftPaletteSettings) ([]Color, error)
Package-Level Functions (total 49)
Creates a random bright, "pimpy" color through a restricted HSV space.
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).
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].
Creates a random dark, "warm" color through a restricted HSV space.
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).
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(colorsCount int) ([]Color, error)
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 HclToLab(h, c, l float64) (L, a, b float64)
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]
Hex parses a "html" hex color-string, either in the 3 "#f0c" or 6 "#ff1034" digits form.
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.
Hsl creates a new Color given a Hue in [0..360], a Saturation [0..1], and a Luminance (lightness) in [0..1]
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.
Hsv creates a new Color given a Hue in [0..360], a Saturation and a Value in [0..1]
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 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)
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)
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 LinearRgbToXyz(r, g, b float64) (x, y, z float64)
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.
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 LuvLChToLuv(l, c, h float64) (L, u, v float64)
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 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)
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]
Constructs a colorful.Color from something implementing color.Color
A wrapper which uses common parameters.
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.
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(colorsCount int) ([]Color, error)
Generates a color by using data given in CIE xyY space. x, y and Y are in [0..1]
func XyyToXyz(x, y, Y float64) (X, Yout, Z float64)
func Xyz(x, y, z float64) Color
func XyzToLab(x, y, z float64) (l, a, b float64)
func XyzToLabWhiteRef(x, y, z float64, wref [3]float64) (l, a, b float64)
XyzToLinearRgb converts from CIE XYZ-space to Linear RGB space.
func XyzToLuv(x, y, z float64) (l, a, b float64)
func XyzToLuvWhiteRef(x, y, z float64, wref [3]float64) (l, u, v float64)
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(X, Y, Z float64, wref [3]float64) (x, y, Yout float64)
Package-Level Variables (total 2)
And another one.
This is the default reference white point.
Package-Level Constants (total 2)
This is the tolerance used when comparing colors using AlmostEqualRgb.
const LAB_DELTA = 1e-06