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 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 })()