Skip to content

Instantly share code, notes, and snippets.

@fudini
Created April 4, 2011 19:34
Show Gist options
  • Save fudini/902253 to your computer and use it in GitHub Desktop.
Save fudini/902253 to your computer and use it in GitHub Desktop.
various color conversion functions
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