How do I convert a HEX color value to CMYK equivalent in php?
I want to write a function that does that. But Ive got no clue how to convert hex to CMYK
e
I just came across this because I was looking for a conversion script. However, the rgb2cmyk function in the answer by Mark Baker doesn’t seem to be calculating the correct values. I compared the results with multiple online calculators and in order to get the correct values I had to modify the function like this:
function rgb2cmyk($var1,$g=0,$b=0) {
if (is_array($var1)) {
$r = $var1['r'];
$g = $var1['g'];
$b = $var1['b'];
} else {
$r = $var1;
}
$cyan = 1 - $r/255;
$magenta = 1 - $g/255;
$yellow = 1 - $b/255;
$black = min($cyan, $magenta, $yellow);
$cyan = @round(($cyan - $black) / (1 - $black) * 100);
$magenta = @round(($magenta - $black) / (1 - $black) * 100);
$yellow = @round(($yellow - $black) / (1 - $black) * 100);
$black = round($black * 100);
return array(
'c' => $cyan,
'm' => $magenta,
'y' => $yellow,
'k' => $black,
);
}
Now, I don’t fully understand what I did here but it appears to output the correct values (compared to all the other online calculators).
function hex2rgb($hex) {
$color = str_replace('#','',$hex);
$rgb = array(
'r' => hexdec(substr($color,0,2)),
'g' => hexdec(substr($color,2,2)),
'b' => hexdec(substr($color,4,2)),
);
return $rgb;
}
function rgb2cmyk($var1,$g=0,$b=0) {
if (is_array($var1)) {
$r = $var1['r'];
$g = $var1['g'];
$b = $var1['b'];
} else {
$r = $var1;
}
$cyan = 255 - $r;
$magenta = 255 - $g;
$yellow = 255 - $b;
$black = min($cyan, $magenta, $yellow);
$cyan = @(($cyan - $black) / (255 - $black));
$magenta = @(($magenta - $black) / (255 - $black));
$yellow = @(($yellow - $black) / (255 - $black));
return array(
'c' => $cyan,
'm' => $magenta,
'y' => $yellow,
'k' => $black,
);
}
$color=rgb2cmyk(hex2rgb('#FF0000'));