我需要将 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 的输出:
168,107,107,108
厘米
13,0,0,1
RGBA
显然,扭转这并不是将 CMYK 转换为 RGBA 的最佳方式。也许我的算法完全错误?它可能期望百分比而不是值?我不完全确定,因为颜色配置文件不是我的强项。
是否有可用的算法(任何语言 - 可以翻译)来帮助将 CMYK 值正确转换为 RGBA?