PHP - 将CMYK颜色值转换为RGBA

时间:2013-06-21 11:37:33

标签: php rgba cmyk

我需要将CMYK值转换为RGBA值,但尚未偶然发现一个适用于此的算法。

我已经通过以下方式获得了RGBA到CMYK:

  • 将RGBA转换为RGB
  • 将RGB转换为CMYK

以下是我用于上述两个要点的算法:

RGBA到RGB

return substr($rgba, 0, -2);

......什么?没有错! :d

RGB到CMYK

$c = 255 - $r;
$m = 255 - $g;
$y = 255 - $b;

$b = min($c, $m, $y);

$c = round(($c - $b) / (255 - $b));
$m = round(($m - $b) / (255 - $b));
$y = round(($y - $b) / (255 - $b));
$k = round($b / 255);

return sprintf('%s,%s,%s,%s', $c, $m, $y, $k);

返回......

CMYK到RGB

$r = 255 - round(2.55 * ($c + $k));
$g = 255 - round(2.55 * ($m + $k));
$b = 255 - round(2.55 * ($y + $k));

if ($r < 0) $r = 0;
if ($g < 0) $g = 0;
if ($b < 0) $b = 0;

return sprintf('%s,%s,%s', $r, $g, $b);

RGB到RGBA

$min = min(array($r, $g, $b));
$a = (255 - $min) / 255;

$r = round(($r - $min) / $a);
$g = round(($g - $min) / $a);
$b = round(($b - $min) / $a);

$a = round($a);

return sprintf('%s,%s,%s,%s', $r, $g, $b, $a);

现在,执行反向,即上面的前两个,我得到了将CMYK转换为RGBA的输出:

cmyk 168,107,107,108 cmyk

rgba 13,0,0,1 rgba

显然,扭转这一点并不是将CMYK转换为RGBA的最佳方式。也许我的算法完全错了?它可能期望百分比而不是价值?我不完全确定颜色配置文件不是我的强项。

是否有可用的算法(任何语言 - 可以翻译)以帮助将CMYK值正确转换为RGBA?

0 个答案:

没有答案