Created
March 1, 2013 17:38
-
-
Save felipesabino/5066336 to your computer and use it in GitHub Desktop.
Javascript color conversion RGB, CMYK and HSV source from http://www.webtoolkit.info/javascript-color-conversion.html
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)); } | |
} | |
} |
demo page is not working. How to use?
I want to convert rgb to cmyk and vice versa
any example??
rgb(0, 0, 0) breaks the rgb to cmyk conversion formula
How to convert rgb to cmyk of the image using this.
@xiao-title
How to convert rgb to cmyk of the image using this
What do you mean by that? Can you clarify your question?
Hi
Nice to meet you.
I have several images from canvas.
I want to convert these image from RBG to CMYK.
Is it possible?
Best Regards.
…On Wed, May 19, 2021 at 11:37 PM Felipe Sabino ***@***.***> wrote:
***@***.**** commented on this gist.
------------------------------
@xiao-title <https://github.com/xiao-title>
How to convert rgb to cmyk of the image using this
What do you mean by that? Can you clarify your question?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<https://gist.github.com/5066336#gistcomment-3748973>, or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ALYAPHUG3GHUME4WTGPKPVDTOPLNJANCNFSM45CZE2EQ>
.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I think you got a bug at line: 102. I think it should be
result.b
instead ofresult.v = v * 255;