summaryrefslogtreecommitdiff
path: root/docs/js/cielab.js
diff options
context:
space:
mode:
Diffstat (limited to 'docs/js/cielab.js')
-rw-r--r--docs/js/cielab.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/docs/js/cielab.js b/docs/js/cielab.js
new file mode 100644
index 0000000..2293f0d
--- /dev/null
+++ b/docs/js/cielab.js
@@ -0,0 +1,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 "rgb(" + 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
+})() \ No newline at end of file