-
-
Save niittymaa/68cf65e1c9fdbde31206 to your computer and use it in GitHub Desktop.
This file contains 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
/** | |
* | |
* Javascript color conversion | |
* http://www.webtoolkit.info/javascript-color-conversion.html | |
* | |
**/ | |
function HSV(h, s, v) { | |
if (h <= 0) { h = 0; } | |
if (s <= 0) { s = 0; } | |
if (v <= 0) { v = 0; } | |
if (h > 360) { h = 360; } | |
if (s > 100) { s = 100; } | |
if (v > 100) { v = 100; } | |
this.h = h; | |
this.s = s; | |
this.v = v; | |
} | |
function RGB(r, g, b) { | |
if (r <= 0) { r = 0; } | |
if (g <= 0) { g = 0; } | |
if (b <= 0) { b = 0; } | |
if (r > 255) { r = 255; } | |
if (g > 255) { g = 255; } | |
if (b > 255) { b = 255; } | |
this.r = r; | |
this.g = g; | |
this.b = b; | |
} | |
function CMYK(c, m, y, k) { | |
if (c <= 0) { c = 0; } | |
if (m <= 0) { m = 0; } | |
if (y <= 0) { y = 0; } | |
if (k <= 0) { k = 0; } | |
if (c > 100) { c = 100; } | |
if (m > 100) { m = 100; } | |
if (y > 100) { y = 100; } | |
if (k > 100) { k = 100; } | |
this.c = c; | |
this.m = m; | |
this.y = y; | |
this.k = k; | |
} | |
var ColorConverter = { | |
_RGBtoHSV : function (RGB) { | |
var result = new HSV(0, 0, 0); | |
r = RGB.r / 255; | |
g = RGB.g / 255; | |
b = RGB.b / 255; | |
var minVal = Math.min(r, g, b); | |
var maxVal = Math.max(r, g, b); | |
var delta = maxVal - minVal; | |
result.v = maxVal; | |
if (delta == 0) { | |
result.h = 0; | |
result.s = 0; | |
} else { | |
result.s = delta / maxVal; | |
var del_R = (((maxVal - r) / 6) + (delta / 2)) / delta; | |
var del_G = (((maxVal - g) / 6) + (delta / 2)) / delta; | |
var del_B = (((maxVal - b) / 6) + (delta / 2)) / delta; | |
if (r == maxVal) { result.h = del_B - del_G; } | |
else if (g == maxVal) { result.h = (1 / 3) + del_R - del_B; } | |
else if (b == maxVal) { result.h = (2 / 3) + del_G - del_R; } | |
if (result.h < 0) { result.h += 1; } | |
if (result.h > 1) { result.h -= 1; } | |
} | |
result.h = Math.round(result.h * 360); | |
result.s = Math.round(result.s * 100); | |
result.v = Math.round(result.v * 100); | |
return result; | |
}, | |
_HSVtoRGB : function (HSV) { | |
var result = new RGB(0, 0, 0); | |
var h = HSV.h / 360; | |
var s = HSV.s / 100; | |
var v = HSV.v / 100; | |
if (s == 0) { | |
result.r = v * 255; | |
result.g = v * 255; | |
result.v = v * 255; | |
} else { | |
var_h = h * 6; | |
var_i = Math.floor(var_h); | |
var_1 = v * (1 - s); | |
var_2 = v * (1 - s * (var_h - var_i)); | |
var_3 = v * (1 - s * (1 - (var_h - var_i))); | |
if (var_i == 0) {var_r = v; var_g = var_3; var_b = var_1} | |
else if (var_i == 1) {var_r = var_2; var_g = v; var_b = var_1} | |
else if (var_i == 2) {var_r = var_1; var_g = v; var_b = var_3} | |
else if (var_i == 3) {var_r = var_1; var_g = var_2; var_b = v} | |
else if (var_i == 4) {var_r = var_3; var_g = var_1; var_b = v} | |
else {var_r = v; var_g = var_1; var_b = var_2}; | |
result.r = var_r * 255; | |
result.g = var_g * 255; | |
result.b = var_b * 255; | |
result.r = Math.round(result.r); | |
result.g = Math.round(result.g); | |
result.b = Math.round(result.b); | |
} | |
return result; | |
}, | |
_CMYKtoRGB : function (CMYK){ | |
var result = new RGB(0, 0, 0); | |
c = CMYK.c / 100; | |
m = CMYK.m / 100; | |
y = CMYK.y / 100; | |
k = CMYK.k / 100; | |
result.r = 1 - Math.min( 1, c * ( 1 - k ) + k ); | |
result.g = 1 - Math.min( 1, m * ( 1 - k ) + k ); | |
result.b = 1 - Math.min( 1, y * ( 1 - k ) + k ); | |
result.r = Math.round( result.r * 255 ); | |
result.g = Math.round( result.g * 255 ); | |
result.b = Math.round( result.b * 255 ); | |
return result; | |
}, | |
_RGBtoCMYK : function (RGB){ | |
var result = new CMYK(0, 0, 0, 0); | |
r = RGB.r / 255; | |
g = RGB.g / 255; | |
b = RGB.b / 255; | |
result.k = Math.min( 1 - r, 1 - g, 1 - b ); | |
result.c = ( 1 - r - result.k ) / ( 1 - result.k ); | |
result.m = ( 1 - g - result.k ) / ( 1 - result.k ); | |
result.y = ( 1 - b - result.k ) / ( 1 - result.k ); | |
result.c = Math.round( result.c * 100 ); | |
result.m = Math.round( result.m * 100 ); | |
result.y = Math.round( result.y * 100 ); | |
result.k = Math.round( result.k * 100 ); | |
return result; | |
}, | |
toRGB : function (o) { | |
if (o instanceof RGB) { return o; } | |
if (o instanceof HSV) { return this._HSVtoRGB(o); } | |
if (o instanceof CMYK) { return this._CMYKtoRGB(o); } | |
}, | |
toHSV : function (o) { | |
if (o instanceof HSV) { return o; } | |
if (o instanceof RGB) { return this._RGBtoHSV(o); } | |
if (o instanceof CMYK) { return this._RGBtoHSV(this._CMYKtoRGB(o)); } | |
}, | |
toCMYK : function (o) { | |
if (o instanceof CMYK) { return o; } | |
if (o instanceof RGB) { return this._RGBtoCMYK(o); } | |
if (o instanceof HSV) { return this._RGBtoCMYK(this._HSVtoRGB(o)); } | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment