1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
var cielab = (function(){
var cielab = {}
var xyz = [0,0,0]
var rgb = [0,0,0]
L_range = [0, 100]
a_range = [-86.185, 98.254]
b_range = [-107.863, 94.482]
cielab.gradient = function (n) {
n = n || 100
var k = 0
var L, a, b
var L0 = randrange(L_range[0] + 50, L_range[1])
var L1 = randrange(L_range[0]+ 50, L_range[1])
var a0 = randrange(a_range[0], a_range[1])
var a1 = randrange(a_range[0], a_range[1])
var b0 = randrange(b_range[0], b_range[1])
var b1 = randrange(b_range[0], b_range[1])
return function next (aa){
L = mix(k/n, L0, L1)
a = mix(k/n, a0, a1)
b = mix(k/n, b0, b1)
rgb = xyz2rgb(hunterlab2xyz(L, a, b))
k += 1
return rgba_string(rgb, aa)
}
}
function rgba_string (rgb, a) { return "rgba(" + rgb.map(Math.round).join(",") + "," + a + ")" }
function hex_string (rgb) { return "#" + rgb.map(Math.round).map(function(n){ var s = n.toString(16); return s.length == 1 ? "0"+s : s }).join("") }
function mix(n,a,b){ return n*a + (1-n)*b }
function clamp(n,a,b){ return n<a?a:n<b?n:b }
function hunterlab2xyz (L,a,b) {
var_Y = L / 10
var_X = a / 17.5 * L / 10
var_Z = b / 7 * L / 10
Y = Math.pow(var_Y, 2)
X = ( var_X + Y ) / 1.02
Z = -( var_Z - Y ) / 0.847
xyz = [X,Y,Z]
}
function xyz2rgb(){
var var_X = xyz[0] / 100 //X from 0 to 95.047 (Observer = 2°, Illuminant = D65)
var var_Y = xyz[1] / 100 //Y from 0 to 100.000
var var_Z = xyz[2] / 100 //Z from 0 to 108.883
var_R = var_X * 3.2406 + var_Y * -1.5372 + var_Z * -0.4986
var_G = var_X * -0.9689 + var_Y * 1.8758 + var_Z * 0.0415
var_B = var_X * 0.0557 + var_Y * -0.2040 + var_Z * 1.0570
if ( var_R > 0.0031308 ) var_R = 1.055 * Math.pow( var_R, 1 / 2.4 ) - 0.055
else var_R = 12.92 * var_R
if ( var_G > 0.0031308 ) var_G = 1.055 * Math.pow( var_G, 1 / 2.4 ) - 0.055
else var_G = 12.92 * var_G
if ( var_B > 0.0031308 ) var_B = 1.055 * Math.pow( var_B, 1 / 2.4 ) - 0.055
else var_B = 12.92 * var_B
rgb[0] = clamp(var_R * 255, 0, 255)
rgb[1] = clamp(var_G * 255, 0, 255)
rgb[2] = clamp(var_B * 255, 0, 255)
return rgb
}
return cielab
})()
|