Created
April 4, 2011 19:34
-
-
Save fudini/902253 to your computer and use it in GitHub Desktop.
various color conversion functions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function hsv2hex(hsv) { | |
return rgb2hex(hsv2rgb(hsv)); | |
} | |
function hex2hsv(hex) { | |
var dec = hex2dec(hex); | |
var rgb = dec2rgb(dec); | |
var hsv = rgb2hsv(rgb); | |
return hsv; | |
} | |
function hsl2hex(hsl) { | |
var rgb = hsl2rgb(hsl); | |
var hex = rgb2hex(rgb); | |
return hex; | |
} | |
function hex2hsl(hex) { | |
var dec = hex2dec(hex); | |
var rgb = dec2rgb(dec); | |
var hsl = rgb2hsl(rgb); | |
return hsl; | |
} | |
function rgb2hsv(rgb){ | |
var r = rgb[0] / 255; | |
var g = rgb[1] / 255; | |
var b = rgb[2] / 255; | |
var max = Math.max(r, g, b), min = Math.min(r, g, b); | |
var h, s, v = max; | |
var d = max - min; | |
s = max == 0 ? 0 : d / max; | |
if(max == min) { | |
h = 0; | |
} else { | |
switch(max){ | |
case r: h = (g - b) / d + (g < b ? 6 : 0); break; | |
case g: h = (b - r) / d + 2; break; | |
case b: h = (r - g) / d + 4; break; | |
} | |
h /= 6; | |
} | |
return [h, s, v]; | |
} | |
function dec2rgb(dec) { | |
var r = dec >> 16 & 255; | |
var g = dec >> 8 & 255; | |
var b = dec & 255; | |
return [r,g,b]; | |
} | |
function dec2hex(dec, padding) { | |
var hex = ""; | |
if(dec == 0) { | |
hex = "0"; | |
} else { | |
while(dec) { | |
var b = dec & 0xf; | |
hex = (b < 10 ? b : String.fromCharCode(b + 87)) + hex; | |
dec = dec >> 4; | |
} | |
} | |
var padder = "0000000000"; | |
return (padder + hex).substr(padder.length - padding + hex.length, padding); | |
} | |
function hex2dec(hex) { | |
var dec = parseInt(hex, 16); | |
return dec; | |
} | |
function hsv2rgb(hsv) { | |
var h = hsv[0]; | |
var s = hsv[1]; | |
var v = hsv[2]; | |
var r, g, b; | |
var i = Math.floor(h * 6); | |
var f = h * 6 - i; | |
var p = v * (1 - s); | |
var q = v * (1 - f * s); | |
var t = v * (1 - (1 - f) * s); | |
switch(i % 6){ | |
case 0: r = v, g = t, b = p; break; | |
case 1: r = q, g = v, b = p; break; | |
case 2: r = p, g = v, b = t; break; | |
case 3: r = p, g = q, b = v; break; | |
case 4: r = t, g = p, b = v; break; | |
case 5: r = v, g = p, b = q; break; | |
} | |
return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]; | |
} | |
function rgb2hex(rgb) { | |
rgb[0] = Math.round(rgb[0]); | |
rgb[1] = Math.round(rgb[1]); | |
rgb[2] = Math.round(rgb[2]); | |
function h(i) { | |
var code = i + 48 + (i > 9 ? 7 : 0); | |
return String.fromCharCode(code); | |
} | |
var hex = h(rgb[0] >> 4) + h(rgb[0] % 16) | |
+ h(rgb[1] >> 4) + h(rgb[1] % 16) | |
+ h(rgb[2] >> 4) + h(rgb[2] % 16); | |
return hex; | |
} | |
// from https://github.com/cloudhead/less.js | |
function hsl2rgb(hsl) { | |
var h = (hsl[0] % 360) / 360, | |
s = hsl[1], | |
l = hsl[2]; | |
var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s; | |
var m1 = l * 2 - m2; | |
return [hue(h + 1/3) * 255, hue(h) * 255, hue(h - 1/3) * 255]; | |
function hue(h) { | |
h = h < 0 ? h + 1 : (h > 1 ? h - 1 : h); | |
if (h * 6 < 1) return m1 + (m2 - m1) * h * 6; | |
else if (h * 2 < 1) return m2; | |
else if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6; | |
else return m1; | |
} | |
} | |
function rgb2hsl(rgb) { | |
var r = rgb[0] / 255, | |
g = rgb[1] / 255, | |
b = rgb[2] / 255; | |
var max = Math.max(r, g, b), min = Math.min(r, g, b); | |
var h, s, l = (max + min) / 2, d = max - min; | |
if (max === min) { | |
h = s = 0; | |
} else { | |
s = l > 0.5 ? d / (2 - max - min) : d / (max + min); | |
switch (max) { | |
case r: h = (g - b) / d + (g < b ? 6 : 0); break; | |
case g: h = (b - r) / d + 2; break; | |
case b: h = (r - g) / d + 4; break; | |
} | |
h /= 6; | |
} | |
return [h * 360, s, l]; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment