Color Theory/Color gradient

"Separate the calculation phase from the colouring phase"—Claude Heiland-Allen =Theory=
 * imagemagick : color-management
 * users-guide-to-high-bit-depth-gimp by Ella Stone

Introduction

 * Your Friendly Guide to Colors in Data Visualisation by Lisa Charlotte Rost
 * Playing with Gradient by rockraikar
 * gimp concepts : gradients
 * Ultra Fractal Gradient Hints by Janet  Parke
 * Image gradient at wikipedia
 * Color gradient at wikipedia
 * w3schools : css3 gradients
 * gradients by Alan Gibson
 * domain coloring
 * DomainColoring by Emilia Petrisor
 * dynamicmath : domain-coloring
 * dctools by Juan Carlos Ponce Campuzano
 * domain_coloring ( gnuplot)

Types of color gradient
Color gradients can be named by :
 * dimension
 * color bit depth
 * color model: hsv
 * number of segments of gradient
 * function used to create gradient
 * special input values ( NAN, no data, high or low out-of-range values)
 * Number of colors
 * number type, range and precision
 * perceptual uniformity
 * monotonic
 * Monotonic in hue
 * Monotonic in saturation
 * Monotonic in luminance

1D
Here color of pixel is proportional to 1D variable. For example in 2D space ( complex plane where point z = x+y*i) :
 * position with respect to x-axis of Cartesian coordinate system : x
 * distance to origin : r=abs(z)
 * potential
 * complex angle angle=arg(z)
 * cyclic-colormap-without-visual-distortions-for-use-in-phase-angle-plots
 * rainbows by Charlie Loyd
 * percepually uniform

An example of a function to return a color that is linearly between two given colors: colorA = [0, 0, 255] # blue colorB = [255, 0, 0] # red function get_gradient_color(val): for i in [1,2,3]: color[i] = colorA[i] + val * (colorB[i] - colorA[i]) return color
 * 1) 'val' must be between 0 and 1

Code
 * continous gradient
 * 1D RGB color
 * 1D gray color

2D


Because color can be treated as more than 1D value it is used to represent more than one ( real or 1D) variable. For example :
 * Robert Munafo uses 2 values from HSV model of color
 * John J. G. Savard uses own function
 * Domain coloring is a technique for visualizing functions of a complex variable
 * matrixlab : rgb-images in MAtlab
 * animated-contours from d3js.org
 * Multiwave coloring for Mandelbrot by Paul Derbyshire
 * 2D colormap by Gerrit :
 * The angle of the final iterate is most naturally mapped to hue, which has the matching topology of a circle
 * the number of iterations is mapped to saturation and value (colorspace is 3D, at least for most humans).

3D

 * Hans Lundmark page

Color model
Color models description

The quality of 16-bit linear RGB is about equal to 12-bit sRGB (= nonlinear RGB), beacause linear color results in disproportionately more samples near white and fewer near black.

Types :
 * RGB is for the display
 * CMYK is for printing
 * other ( HSV, HSL, ...) are for choosing color, processing
 * HSLuv
 * YUV (Luminance and chrominance) it is a way of breaking the brightness and colours in the image down into numbers
 * HWB

RGB

 * RGB = "linear" color space
 * sRGB
 * sRGB = standard RGB. SRGBColorSpace (“srgb”) refers to the color space defined by the Rec. 709 primaries, D65 white point, and nonlinear sRGB transfer functions.
 * The sRGB Linear space is the same as sRGB except that the transfer function is linear-light (there is no gamma-encoding

HSV
In Basic :

Interpolating function

 * One can use any function in each segment of gradient
 * Output of function is scaled to range of color component
 * interpolation between colors can be:
 * lerp = Linear intERPolation, in sRGB color space
 * nonlinear (quadratic, ...) classic in Photoshop
 * linear color space interpolation: convert keys from sRGB to float Linear, lerp between them, convert back into fixed point sRGB
 * perceptual color space interpolation ( OKlab): convert keys from sRGB to float Linear, then into Oklab, lerp between them, convert back into float Linear, then back into fixed point sRGB.

the tail of gradient Oklab evaluation function code by Aras Pranckevičius:

In CSS interpolation between two color values takes place by executing the following steps:
 * (if required) converting them to a given color space which will be referred to as the interpolation color space below
 * (if required) re-inserting carried-forward values in the converted colors
 * (if required) fixing up the hues, depending on the selected 
 * premultiplication of the color components
 * linearly interpolating each component of the computed value of the color separately
 * undoing premultiplication

Example 36. To interpolate:
 * in the Lab color space
 * the two colors: rgb(76% 62% 03%/0.4) and color(display-p3 0.84 0.19 0.72/0.6)
 * they are first converted to lab: lab(66.927% 4.873 68.622/0.4) lab(53.503% 82.672 -33.901/0.6)
 * premultiplication: then the L, a and b coordinates are premultiplied before interpolation: [26.771% 1.949 27.449] and [32.102% 49.603 -20.341].
 * Interpolation: The midpoint of linearly interpolating these would be [29.4365% 25.776 3.554] which,
 * premultiplication is undone: with an alpha value of 0.5, which gives lab(58.873% 51.552 7.108) / 0.5)

Number of colors
Number of color is determined by color depth : from 2 colors to 16 mln of colors.

See also
 * 16-bit (rgb-565) color name definitions in c by Nic Newdigate
 * About RGB565 and how to convert into it November 14, 2018 by Thomas Barth

Repetition and offset
Direct repetition :

Color is proportional to position  <0;1>  of color in color gradient. if position > 1 then we have repetition of colors. it maybe useful

Mirror repetition  :

"colorCycleMirror - This will reflect the colour gradient so that it cycles smoothly "

Offset :

=How to use color gradients in computer programs= First find what format of color you need in your program.

Ways of making gradient :
 * gradient functions
 * gradient files
 * A colour look-up table (CLUT) ) color map, palette
 * palette
 * mixed

"Lookup tables (LUTs) are an excellent technique for optimizing the evaluation of functions that are expensive to compute and inexpensive to cache. ... For data requests that fall between the table's samples, an interpolation algorithm can generate reasonable approximations by averaging nearby samples."

CLUT image
One can use CLUT image a a source of the gradient

convert input.pgm -level 0,65532 clut.ppm -interpolate integer -clut -depth 8 output.png

perl
Conversions :
 * between FractInt and Fractal eXtreme palettes

lists:
 * wikipedia : List_of_color_palettes

Gradient functions
Name:
 * coloring function

types
 * continous
 * linear
 * non linear
 * discrete

Examples :
 * in JS using mandel.js by Christopher Williams
 * Javascript using jQuery
 * C++ function by Richel Bilderbeek
 * Multiwave coloring for Mandelbrot
 * histogram colouring
 * Dave Green's `cubehelix' colour scheme
 * css gradients
 * stackoverflow question: how-to-create-colour-gradient-in-python
 * complex_plot from Arb library and description

HSV gradient

 * explanation by Robert P. Munafo
 * Basic code and images by Jean Debord
 * c programs by Curtis T McMullen

Linear RGB gradient with 6 segments
Rainbow gradient
 * in scientific computing
 * SOMEWHERE OVER THE RAINBOW. How to Make Effective Use of Colors in Meteorological Visualizations by Reto Stauffer, Georg J. Mayr, Markus Dabernig, and Achim Zeileis

Here gradient consists from 6 segments. In each segment only one RGB component of color is changed using linear function.

C version
Input of function are 2 variables :
 * position of color in gradient, (a normalized float between 0.0 and 1.0 )
 * color as an array of RGB components ( integer without sign from 0 to 255 )

This function does not use direct outoput ( void) but changes input variables color. One can use it this way:

Sine based gradient

 * Cosine based gradient generation by Karsten Schmidt
 * paletes by inigo quilez

"The idea is to change the color based on a sine wave. This gives a nice smooth gradient effect (although it’s not linear, which is not a requirement anyway). By changing the frequency of the RGB components (we could theoretically work with other color spaces such as HSV) we can get various gradients. Also, we can also play with the phase of each color component, creating a “shifting” effect. The basic implementation of such a gradient can be implemented like so:"

"Where: Note that all calculations are done with floating point numbers (ranging from 0.0 to 1.0), converting to a WPF Color structure (in this case) at the very end. This is simply convenient, as we’re working with trigonometric functions, which like floating point numbers rather than integers. The result is normalized to the range 0 to 1, as the sine function produces results from –1 to 1, so we add one to get a range of 0 to 2 and finally divide by 2 to get to the desired range."
 * the Freq* are the frequencies of the respective RGB colors
 * Phase* are the phase shift values.

cubehelix
cubehelix gradient
 * Gnuplot palette cubehelix

Gradient files

 * Color Look-Up Table (CLUT)

File types for color gradient
There are special file types for color gradients:
 * The GIMP uses the files with .ggr extension
 * Fractint uses .map files
 * UltraFractal uses .ugr - These files can contain multiple gradients
 * ual - old Ultra Fractal gradient file
 * rgb, pal, gpf - gnuplot files
 * The Matplotlib colormap is a lookup table
 * csv files
 * maps in WHIP format ( Autodesk)  by Paul Bourke
 * Gnofract4D saves gradients only inside the graphic file, not as separate file.
 * MatLab
 * Python
 * R
 * GMT
 * QGIS
 * Ncview
 * Ferret
 * Plotly
 * Paraview
 * VisIt
 * Mathematica
 * Surfer
 * d3
 * SKUA-GOCAD
 * Petrel
 * Fledermaus
 * Qimera
 * ImageJ
 * Fiji
 * Inkscape
 * XML
 * text
 * SASS style sheet
 * LESS - http://lesscss.org style sheet
 * CSS - Cascading Style Sheet

csv files
a small table containing 33 values ( stored in a csv file) by Kenneth Moreland

CSS syntax
CSS syntax

The default color space for mixing (and gradients) in CSS is oklab

Non-repeating
Color gradients

black-to-white-gradient-in-each-space

conic
Conic gradient in CSS

/* Hue wheel */ background: conic-gradient(red, yellow, lime, aqua, blue, magenta, red); border-radius: 50%

Fractint map files
The default filetype extension for color-map files is ".MAP". These are ASCII text files. Consist of a series of RGB triplet values (one triplet per line, encoded as the red, green, and blue [RGB] components of the color). Color map ( or palette) is used as a colour look-up table Default color map is in the Default.map file : 0 0 0           The default VGA color map 0 0 168 0 168 0 0 168 168 168 0 0 168 0 168 168 84 0 168 168 168 84 84 84 84 84 252 84 252 84 84 252 252 252 84 84 252 84 252 252 252 84 252 252 252 0 0 0 20 20 20 32 32 32 44 44 44 56 56 56 68 68 68 80 80 80 96 96 96 112 112 112 128 128 128 144 144 144 160 160 160 180 180 180 200 200 200 224 224 224 252 252 252 0 0 252 64 0 252 124 0 252 188 0 252 252 0 252 252 0 188 252 0 124 252 0 64 252 0 0 252 64 0 252 124 0 252 188 0 252 252 0 188 252 0 124 252 0 64 252 0 0 252 0 0 252 64 0 252 124 0 252 188 0 252 252 0 188 252 0 124 252 0 64 252 124 124 252 156 124 252 188 124 252 220 124 252 252 124 252 252 124 220 252 124 188 252 124 156 252 124 124 252 156 124 252 188 124 252 220 124 252 252 124 220 252 124 188 252 124 156 252 124 124 252 124 124 252 156 124 252 188 124 252 220 124 252 252 124 220 252 124 188 252 124 156 252 180 180 252 196 180 252 216 180 252 232 180 252 252 180 252 252 180 232 252 180 216 252 180 196 252 180 180 252 196 180 252 216 180 252 232 180 252 252 180 232 252 180 216 252 180 196 252 180 180 252 180 180 252 196 180 252 216 180 252 232 180 252 252 180 232 252 180 216 252 180 196 252 0 0 112 28 0 112 56 0 112 84 0 112 112 0 112 112 0 84 112 0 56 112 0 28 112 0 0 112 28 0 112 56 0 112 84 0 112 112 0 84 112 0 56 112 0 28 112 0 0 112 0 0 112 28 0 112 56 0 112 84 0 112 112 0 84 112 0 56 112 0 28 112 56 56 112 68 56 112 84 56 112 96 56 112 112 56 112 112 56 96 112 56 84 112 56 68 112 56 56 112 68 56 112 84 56 112 96 56 112 112 56 96 112 56 84 112 56 68 112 56 56 112 56 56 112 68 56 112 84 56 112 96 56 112 112 56 96 112 56 84 112 56 68 112 80 80 112 88 80 112 96 80 112 104 80 112 112 80 112 112 80 104 112 80 96 112 80 88 112 80 80 112 88 80 112 96 80 112 104 80 112 112 80 104 112 80 96 112 80 88 112 80 80 112 80 80 112 88 80 112 96 80 112 104 80 112 112 80 104 112 80 96 112 80 88 112 0 0 64 16 0 64 32 0 64 48 0 64 64 0 64 64 0 48 64 0 32 64 0 16 64 0 0 64 16 0 64 32 0 64 48 0 64 64 0 48 64 0 32 64 0 16 64 0 0 64 0 0 64 16 0 64 32 0 64 48 0 64 64 0 48 64 0 32 64 0 16 64 32 32 64 40 32 64 48 32 64 56 32 64 64 32 64 64 32 56 64 32 48 64 32 40 64 32 32 64 40 32 64 48 32 64 56 32 64 64 32 56 64 32 48 64 32 40 64 32 32 64 32 32 64 40 32 64 48 32 64 56 32 64 64 32 56 64 32 48 64 32 40 64 44 44 64 48 44 64 52 44 64 60 44 64 64 44 64 64 44 60 64 44 52 64 44 48 64 44 44 64 48 44 64 52 44 64 60 44 64 64 44 60 64 44 52 64 44 48 64 44 44 64 44 44 64 48 44 64 52 44 64 60 44 64 64 44 60 64 44 52 64 44 48 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Gimp/Inscape gpl files
Used by : Gimp, Inscape, Aseprite, Drawpile, Krita, MyPaint

Syntax:
 * ASCII files ( text files)
 * Comments must start with a #. In non-empty lines that don't, the first three tokens are parsed as numbers
 * There is no alpha support
 * GIMP Palette - it must be the first line of the file
 * Name: - sets the name of the color palette.
 * Columns: - is just an indication for displaying the palette inside GIMP.
 * # - comments must start with a #. All comments are ignored by GIMP.
 * 0 0 0 Black - RGB values for the color followed by the color name

Source code of loader function

GIMP palettes are stored using a special file format, in files with the extension .gpl.

Directory:
 * ~/.config/GIMP/x.y/palettes/ directory (where x.y is the GIMP version number)
 * ~/.config/inkscape/palettes/

GIMP Palette Name: Material Design Columns: 14 255 248 225		amber 50 255 236 179		amber 100 255 224 130		amber 200 255 213 79		amber 300 255 202 40		amber 400 255 193  7		amber 500 255 179  0		amber 600 255 160  0		amber 700 255 143  0		amber 800 255 111  0		amber 900 255 229 127		amber a100 255 215 64		amber a200 255 196  0		amber a400 255 171  0		amber a700 227 242 253		blue 50 187 222 251		blue 100 144 202 249		blue 200 100 181 246		blue 300 66 165 245		blue 400 33 150 243		blue 500 30 136 229		blue 600 25 118 210		blue 700 21 101 192		blue 800 13 71 161		blue 900 130 177 255		blue a100 68 138 255		blue a200 41 121 255		blue a400 41 98 255		blue a700 224 247 250		cyan 50 178 235 242		cyan 100 128 222 234		cyan 200 77 208 225		cyan 300 38 198 218		cyan 400 0 188 212		cyan 500 0 172 193		cyan 600 0 151 167		cyan 700 0 131 143		cyan 800 0 96 100		cyan 900 132 255 255		cyan a100 24 255 255		cyan a200 0 229 255		cyan a400 0 184 212		cyan a700 251 233 231		deep-orange 50 255 204 188		deep-orange 100 255 171 145		deep-orange 200 255 138 101		deep-orange 300 255 112 67		deep-orange 400 255 87  34		deep-orange 500 244 81  30		deep-orange 600 230 74  25		deep-orange 700 216 67  21		deep-orange 800 191 54  12		deep-orange 900 255 158 128		deep-orange a100 255 110 64		deep-orange a200 255 61   0		deep-orange a400 221 44   0		deep-orange a700 237 231 246		deep-purple 50 209 196 233		deep-purple 100 179 157 219		deep-purple 200 149 117 205		deep-purple 300 126 87 194		deep-purple 400 103 58 183		deep-purple 500 94 53 177		deep-purple 600 81 45 168		deep-purple 700 69 39 160		deep-purple 800 49 27 146		deep-purple 900 179 136 255		deep-purple a100 124 77 255		deep-purple a200 101 31 255		deep-purple a400 98  0 234		deep-purple a700 232 245 233		green 50 200 230 201		green 100 165 214 167		green 200 129 199 132		green 300 102 187 106		green 400 76 175 80		green 500 67 160 71		green 600 56 142 60		green 700 46 125 50		green 800 27 94  32		green 900 185 246 202		green a100 105 240 174		green a200 0 230 118		green a400 0 200 83		green a700 232 234 246		indigo 50 197 202 233		indigo 100 159 168 218		indigo 200 121 134 203		indigo 300 92 107 192		indigo 400 63 81 181		indigo 500 57 73 171		indigo 600 48 63 159		indigo 700 40 53 147		indigo 800 26 35 126		indigo 900 140 158 255		indigo a100 83 109 254		indigo a200 61 90 254		indigo a400 48 79 254		indigo a700 225 245 254		light-blue 50 179 229 252		light-blue 100 129 212 250		light-blue 200 79 195 247		light-blue 300 41 182 246		light-blue 400 3 169 244		light-blue 500 3 155 229		light-blue 600 2 136 209		light-blue 700 2 119 189		light-blue 800 1 87 155		light-blue 900 128 216 255		light-blue a100 64 196 255		light-blue a200 0 176 255		light-blue a400 0 145 234		light-blue a700 241 248 233		light-green 50 220 237 200		light-green 100 197 225 165		light-green 200 174 213 129		light-green 300 156 204 101		light-green 400 139 195 74		light-green 500 124 179 66		light-green 600 104 159 56		light-green 700 85 139 47		light-green 800 51 105 30		light-green 900 204 255 144		light-green a100 178 255 89		light-green a200 118 255  3		light-green a400 100 221 23		light-green a700 249 251 231		lime 50 240 244 195		lime 100 230 238 156		lime 200 220 231 117		lime 300 212 225 87		lime 400 205 220 57		lime 500 192 202 51		lime 600 175 180 43		lime 700 158 157 36		lime 800 130 119 23		lime 900 244 255 129		lime a100 238 255 65		lime a200 198 255  0		lime a400 174 234  0		lime a700 255 243 224		orange 50 255 224 178		orange 100 255 204 128		orange 200 255 183 77		orange 300 255 167 38		orange 400 255 152  0		orange 500 251 140  0		orange 600 245 124  0		orange 700 239 108  0		orange 800 230 81   0		orange 900 255 209 128		orange a100 255 171 64		orange a200 255 145  0		orange a400 255 109  0		orange a700 252 228 236		pink 50 248 187 208		pink 100 244 143 177		pink 200 240 98 146		pink 300 236 64 122		pink 400 233 30  99		pink 500 216 27  96		pink 600 194 24  91		pink 700 173 20  87		pink 800 136 14  79		pink 900 255 128 171		pink a100 255 64 129		pink a200 245  0  87		pink a400 197 17  98		pink a700 243 229 245		purple 50 225 190 231		purple 100 206 147 216		purple 200 186 104 200		purple 300 171 71 188		purple 400 156 39 176		purple 500 142 36 170		purple 600 123 31 162		purple 700 106 27 154		purple 800 74 20 140		purple 900 234 128 252		purple a100 224 64 251		purple a200 213  0 249		purple a400 170  0 255		purple a700 255 235 238		red 50 255 205 210		red 100 239 154 154		red 200 229 115 115		red 300 239 83  80		red 400 244 67  54		red 500 229 57  53		red 600 211 47  47		red 700 198 40  40		red 800 183 28  28		red 900 255 138 128		red a100 255 82  82		red a200 255 23  68		red a400 213  0   0		red a700 224 242 241		teal 50 178 223 219		teal 100 128 203 196		teal 200 77 182 172		teal 300 38 166 154		teal 400 0 150 136		teal 500 0 137 123		teal 600 0 121 107		teal 700 0 105 92		teal 800 0 77  64		teal 900 167 255 235		teal a100 100 255 218		teal a200 29 233 182		teal a400 0 191 165		teal a700 255 253 231		yellow 50 255 249 196		yellow 100 255 245 157		yellow 200 255 241 118		yellow 300 255 238 88		yellow 400 255 235 59		yellow 500 253 216 53		yellow 600 251 192 45		yellow 700 249 168 37		yellow 800 245 127 23		yellow 900 255 255 141		yellow a100 255 255  0		yellow a200 255 234  0		yellow a400 255 214  0		yellow a700 236 239 241		blue-grey 50 207 216 220		blue-grey 100 176 190 197		blue-grey 200 144 164 174		blue-grey 300 120 144 156		blue-grey 400 96 125 139		blue-grey 500 84 110 122		blue-grey 600 69 90 100		blue-grey 700 55 71  79		blue-grey 800 38 50  56		blue-grey 900 239 235 233		brown 50 215 204 200		brown 100 188 170 164		brown 200 161 136 127		brown 300 141 110 99		brown 400 121 85  72		brown 500 109 76  65		brown 600 93 64  55		brown 700 78 52  46		brown 800 62 39  35		brown 900 250 250 250		grey 50 245 245 245		grey 100 238 238 238		grey 200 224 224 224		grey 300 189 189 189		grey 400 158 158 158		grey 500 117 117 117		grey 600 97 97  97		grey 700 66 66  66		grey 800 33 33  33		grey 900 0  0   0	   	black 255 255 255	white

Gimp ggr files
"The gradients that are supplied with GIMP are stored in a system gradients folder. By default, gradients that you create are stored in a folder called gradients in your personal GIMP directory. Any gradient files (ending with the extension .ggr) found in one of these folders, will automatically be loaded when you start GIMP" ( from gimp doc ) Default gradients are in /usr/share/gimp/2.0/gradients directory ( check it in a window : Edit/preferences/directories)

Git repo
 * https://git.gnome.org/browse/gimp/tree/data/gradients

Gimp gradients can be created thru :
 * GUI
 * manually in text editor ( use predefined gradients as a base)
 * in own programs

Gimp gradient file format is described in:
 * GIMP Application Reference Manual
 * source files :
 * app/gradient.c and app/gradient_header.h for GIMP 1.3 version.
 * gimp-2.6.0/app/core/gimpgradient.c

Gimp Gradient Segment format :

In GimpConfig style format:


 * 1) GIMP Gradient file

(GimpGradient "Abstract 1"       (segment 0.000000 0.286311 0.572621 (left-color (gimp-rgba 0.269543 0.259267 1.000000 1.000000)) (right-color (gimp-rgba 0.215635 0.407414 0.984953 1.000000)) (blending-function linear) (coloring-type rgb))       (segment ...)        ...        (segment ...))

GIMP Gradient Name: GMT_hot 3 0.000000 0.187500 0.375000 0.000000 0.000000 0.000000 1.000000 1.000000 0.000000 0.000000 1.000000 0 0 0.375000 0.562500 0.750000 1.000000 0.000000 0.000000 1.000000 1.000000 1.000000 0.000000 1.000000 0 0 0.750000 0.875000 1.000000 1.000000 1.000000 0.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0 0

First line says it is a gimp gradient file.

Second line is a gradient's name.

Third line tells the number of segments in the gradient.

Each line following defines the property of each segment in following order :"
 * position of left stoppoint
 * position of middle point
 * position of right stoppoint
 * R for left stoppoint
 * G for left stoppoint
 * B for left stoppoint
 * A for left stoppoint
 * R for right stoppoint
 * G for right stoppoint
 * B for right stoppoint
 * A for right stoppoint
 * Blending function constant
 * coloring type constant

There are only two constants at the end of each line:
 * the blending function constant of the segment (apparently 0=Linear, 1=Curved, 2=Sinusoidal, 3=Spherical (increasing), 4=Spherical (decreasing))
 * the coloring type constant of the segment (probably 0=RGB, 1=HSV (counter-clockwise hue), 2=HSV (clockwise hue)

json

 * json object

links

 * cpp code by Patrick Ross
 * Reading gimp ggr files in python by Ned Batchelder
 * Python Pil library functions for reading GIMP gradient files ( in file GimpGradientFile.py)
 * perl scripts to convert gimp-1.2.x palettes and gradients into a 1.3 form by Jeff Trefftzs
 * Gimp Python plugin: make-gradient.py by Giuseppe Conte
 * gimp gradient files - lisp code from Polypen by Yannick Gingras
 * Perl functions from GIMP pdb - gradient.pdb
 * stackoverflow : javascript-color-gradient
 * c pseudocode and js code by Christopher Williams
 * Lode's Computer Graphics Tutorial : Light and Color
 * bruce lindbloom : color equations

Collections of gradients / colormaps

 * gradcentral
 * Cpt-city
 * gimp gradients (ggr files) are in directory : /usr/share/gimp/2.0/gradients/
 * The COLOURlovers site hosts a million 5-colour palettes in several formats
 * thi.ng
 * SciVisColor
 * Fabio Crameri: scientific colourmaps in provided in all major formats

=programs=
 * |leonardo Color tools for design systems
 * gnuplot
 * mdigi tools color: Color tools for the web listed alphabetically
 * The CCC-Tool is a general tool for the creation, analyzing and testing of colormaps with the effort to minimize the needed interaction components.
 * image magic
 * OpenCV library
 * python
 * colorAide A library to aid in using colors
 * coloria Tools for color research
 * colour-science: Colour is an open-source Python package providing a comprehensive number of algorithms and datasets for colour science.
 * colour = color representations manipulation library (RGB, HSL, web, ...) by Valentin Lab
 * njsmith: colorspacious: A powerful, accurate, and easy-to-use Python library for doing colorspace conversions
 * Colour is an open-source Python package providing a comprehensive number of algorithms and datasets for colour science. It is freely available under the New BSD License terms. Colour is an affiliated project of NumFOCUS, a 501(c)(3) nonprofit in the United States.
 * matplotlib
 * matplotlib: viscm A tool for visualizing and designing colormaps using colorspacious and matplotlib
 * math3d : sphere colormap
 * VIVID GRADIENT GENERATOR TOOL by learn ui design
 * paletton- color scheme designer and generator
 * Image Magic
 * snibgo's ImageMagick pages: Gradients Cookbook
 * snibgo's ImageMagick pages: Gradient contours

color convert

 * qConv.com - The quick converter and color manager. The powerful color database for designers and agencies.
 * hextoral color converter
 * colormine color-converter
 * java lib
 * ColorMine for POV-Ray byMichael Horvath
 * C# by hvaldi
 * ColorSpace: C++ library for converting between color spaces and comparing colors by Nicolae Berendea
 * farver: High Performance Colourspace Manipulation in R. Src code in c++. It provides an interface to a modified version of the ColorSpace C++ library.

split your hexadecimal color code into 3 values, that could be treated as RGB vectors (RGB decimals) ( from hextoral)

color gradient convert

 * ggr2glsl is a simple utility to convert GIMP gradient files to GLSL functions.
 * gradient-converter-apophysis-to-kalles-fraktaler

=tests=

Test your :
 * monitor ( gamut)
 * graphic card
 * printer
 * own

Test your color abilities

 * The X-Rite Color Challenge and Hue Test
 * The FM100 Hue Test is an easy-to-administer test and a highly effective method for evaluating an individual's ability to discern color.

=How to choose color gradient ?=
 * How to Choose Colours Procedurally (Algorithms) 29 Jul, 2012 by Herman Tulleken
 * perceptually-smooth-multi-color-linear-gradients by Matt DesLauriers Jan 25, 2021
 * Nonlinear Color Scales for Interactive Exploration by Young Hyun
 * gencolormap
 * Color Maps for Scientific Visualization by Kenneth Moreland
 * Color Map Advice for Scientific Visualization
 * git
 * In Search of a Perfect Colormap by Peter Karpov
 * Good Colour Maps: How to Design Them by Peter Kovesi
 * Rainbow Color Map Critiques: An Overview and Annotated Bibliography By Steve Eddins, MathWorks
 * scivis tutorials
 * Matteo Niccoli
 * bids: Colormap recommendation

How to visualize/test/evaluate/compare colormaps?
In python to visualize matplotlib built-in colormaps:

python -m viscm view jet

To visualize one of viscm colormaps:

python -m viscm view path/to/colormap_script.py

In gnuplot use test command:

Results: 2D profiles of each color channel

R code

Tips:
 * A good discrete palette has distinct colors
 * A good continuous colormap does not show boundaries between colors

See also
 * How to evaluate and compare color maps by SEG
 * pals: [[R Programming|R programming language] package to evaluate colormaps]
 * colorcet test image
 * matplotlib color map manipultions
 * Kenneth Moreland: color-advice
 * David Johnstone: lch-lab-colour-gradient-picker
 * ccc tool
 * scivis color : color moves app
 * color brewer colomaps

How to make perceptually uniform gradient?

 * How to generate a perceptually uniform gradient with CAM16UCS colour model?
 * stackoverflow qestion: more-perceptually-uniform-colormaps
 * CMasher: Scientific, perceptually uniform colormaps
 * colorcet : Perceptually Uniform Colour Maps by Peter Kovesi
 * matplotlib cmocean : Beautiful colormaps for oceanography. Most of the colormaps started from matplotlib colormaps, but have now been adjusted using the viscm tool to be perceptually uniform.

How to make colormap with maximum distinguishable colours?

 * stackoverflow question: colormap-with-maximum-distinguishable-colours
 * Colorgorical To generate a palette with n colors,

How to use special values in colormap?

 * stackoverflow question: how-can-i-plot-nan-values-as-a-special-color-with-imshow

=How to Calculate the average color of an image ? =

Averaging RGB should be correct assuming you do it in linear RGB. If your images are in sRGB, you can remove the gamma correction by doing something like the following for each of the R, G, and B components:

float sRGBToLinear(UInt8 component) {       float tempComponent = (float)component / 255.0; if (tempComponent <= 0.04045) {           tempComponent = tempComponent / 12.92; }       else {           tempComponent = pow((tempComponent + 0.055) / (1.055), 2.4); }       return tempComponent; }

You can then average together all of the red values in the image, all of the green values in the image, and all of the blue values in the image after they've been run through the above conversion. You can then do the opposite conversion to get back to sRGB:

UInt8 linearRGBTosRGB(float component) {       float tempComponent =  0.0; if (component <= 0.00318308) {           tempComponent = 12.92 * component; }       else {           tempComponent = 1.055 * pow(component, 1.0 / 2.4) - 0.055; }       return (UInt8)(tempComponent * 255.0); }

Note that alpha makes things slightly more complicated. If you're using premultiplied alpha, you can simply apply the above calculations for the average. If you're using straight alpha, you'll want to multiply each of the R, G, and B components by the alpha before doing the averaging.

=How to render light spectrum?=
 * Colour Rendering of Spectra by John Walker 25th April 1996
 * Lightness approximations by Peter Karpov

=How to read(pick) color from the image ? =
 * Pick Color From Image by ginifab
 * pick-a-color-from-an-image-using-canvas-and-javascript by nakome
 * developer mozilla: getting_the_pixel_data_for_a_context
 * How to get the pixel color from a canvas on click or mouse event with Javascript from ourcodeworld

=How to read color gradient from image ? =
 * online
 * color.adobe tool
 * color-loom/ Colorloom is a tool developed by the Sculpting Vis Collaborative and inspired to mimic palette creation in the arts. The tool extracts a selection of hues from images and enables users to create continuous colormaps by dragging these extracted hues into a desired order, all within the same interface. These colormaps can be exported in a variety of formats for use in major visualization software.

=How to extract color palette from image ?=
 * Colores.py—extract color palettes from your favorite images
 * Color Scheme Extraction
 * using Image Magic
 * using Gimp
 * "There is this small tool in fractalshades that interactively grabs a colormap from a line you draw on an image, the editor looks like the attached picture. Not perfect, but I found it useful (in the 'tools' section). The cmap can then be used in the program or exported for later use (for the time being, exports only to a txt format specific to this program.)" Geoffroy Billotey (GBillotey)

=How to extract ICC profile from the image file ? =

Using Image Magic:

convert photo.jpg profile.icc

How to view ICC profile ?

exiftool a.icc

Example output: ExifTool Version Number        : 12.40 File Name                      : vw1.icc Directory                      :. File Size                      : 548 bytes File Modification Date/Time    : 2023:11:12 20:48:16+01:00 File Access Date/Time          : 2023:11:12 20:48:47+01:00 File Inode Change Date/Time    : 2023:11:12 20:48:16+01:00 File Permissions               : -rw-rw-r-- File Type                      : ICC File Type Extension            : icc MIME Type                      : application/vnd.iccprofile Profile CMM Type               : Apple Computer Inc. Profile Version                 : 4.0.0 Profile Class                  : Display Device Profile Color Space Data               : RGB Profile Connection Space       : XYZ Profile Date Time              : 2018:06:24 13:22:32 Profile File Signature         : acsp Primary Platform               : Apple Computer Inc. CMM Flags                       : Not Embedded, Independent Device Manufacturer            : Unknown (OPPO) Device Model                   : Device Attributes              : Reflective, Glossy, Positive, Color Rendering Intent               : Perceptual Connection Space Illuminant    : 0.9642 1 0.82491 Profile Creator                : Apple Computer Inc. Profile ID                      : 0 Profile Description            : Display P3 Profile Copyright               : Copyright Apple Inc., 2017 Media White Point              : 0.95045 1 1.08905 Red Matrix Column              : 0.51512 0.2412 -0.00105 Green Matrix Column            : 0.29198 0.69225 0.04189 Blue Matrix Column             : 0.1571 0.06657 0.78407 Red Tone Reproduction Curve    : (Binary data 32 bytes, use -b option to extract) Chromatic Adaptation           : 1.04788 0.02292 -0.0502 0.02959 0.99048 -0.01706 -0.00923 0.01508 0.75168 Blue Tone Reproduction Curve   : (Binary data 32 bytes, use -b option to extract) Green Tone Reproduction Curve  : (Binary data 32 bytes, use -b option to extract)

=How to find lighter and darker colors based on any initial color ? =
 * 0to255 a color tool by Shaun Chapman uses the lightness (L) scale from HSL
 * stackoverflow : formula-to-determine-brightness-of-rgb-color
 * stackoverflow : programmatically-lighten-or-darken-a-hex-color-or-rgb-and-blend-colors
 * learnwebgl: model_color by C. Wayne Brown: To change a color (r,g,b) to make it lighter, move it closer to (1,1,1). To change a color (r,g,b) to make it darker, move it closer to (0,0,0).

// darker by C. Wayne Brown newR = R + (0-R)*t; // where t varies between 0 and 1 newG = G + (0-G)*t; // where t varies between 0 and 1 newB = B + (0-B)*t; // where t varies between 0 and 1 // lighter C. Wayne Brown newR = R + (1-R)*t; // where t varies between 0 and 1 newG = G + (1-G)*t; // where t varies between 0 and 1 newB = B + (1-B)*t; // where t varies between 0 and 1

=How to remove gradient banding ? =
 * dither
 * no more banding by Jeff Broderick
 * graphicdesign.stackexchange question: how-do-you-avoid-bands-of-prominent-color-in-gradients

=How to generate and refine palettes of optimally distinct colors= = How to simulating colors of the sky ? =
 * avoid-equidistant-hsv-colors
 * choose colors for data scientists
 * rich colors
 * 

=How to make quality images?=
 * How to make quality 2D static images ?

=Gradient contours=
 * description by Alan Gibson.

=Examples of beautiful gradients=
 * Mandelbrot 109 - Mandelflake by olbaid-st
 * a slight motion in the colour gradient
 * Into The Purple - Mandelbrot Fractal Zoom by Maths Town

=See also=
 * Color_calibration
 * Color correction
 * Color terms
 * Swatch Book = color palette in digital terminology, collection of material fragments in different colors, Paper color swatch book, Wool swatch book
 * swatche books
 * Image noise
 * Commons Category:Color in computer graphics
 * stackoverflow questions tagged gradient
 * github topics
 * scratchapixel: simulating-sky
 * Color by Bruce MacEvoy
 * The X-Rite Color Challenge and Hue Test
 * colour lovers: Color/s, Pattern/s, Palette/s, Lover/s or stats
 * gamma correction
 * Gamma_correctionin wikipedia
 * WHAT EVERY CODER SHOULD KNOW ABOUT GAMMA by JOHN NOVAK
 * Power law transform
 * coloring algorithms
 * by Christopher Williams
 * by Junpei Sekino
 * perceptually uniform color space
 * OK LAB by Björn Ottosson
 * kenneth moreland github


 * bruce lindbloom
 * gradient maps by bjango: Gradient maps in Photoshop use brightness to assign corresponding colours taken from a gradient of your choice

= References =
 * awesome-colour: A curated list of awesome colour science resources.
 * stackoverflow questions tagged colormap
 * github repo colour-science