印刷行業常需 CMYK ↔ RGB 轉換。本文提供兩個純 PHP 函數:hex2rgb() 解析十六進制顏色、rgb2cmyk() 執行標準轉換算法(基於 255 域歸一化)。
function hex2rgb($hex)
{
$color = str_replace('#', '', $hex);
return [
'r' => hexdec(substr($color, 0, 2)),
'g' => hexdec(substr($color, 2, 2)),
'b' => hexdec(substr($color, 4, 2)),
];
}
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);
// 避免除零:@ 抑制警告,黑色全滿時分母為 0
$cyan = @(($cyan - $black) / (255 - $black)) * 255;
$magenta = @(($magenta - $black) / (255 - $black)) * 255;
$yellow = @(($yellow - $black) / (255 - $black)) * 255;
// 歸一化到 0-1 區間(印刷標準)
return [
'c' => $cyan / 255,
'm' => $magenta / 255,
'y' => $yellow / 255,
'k' => $black / 255,
];
}
// 使用示例
$cmyk = rgb2cmyk(hex2rgb('#FF0000')); // 純紅
print_r($cmyk);
C = 1 - R/255 M = 1 - G/255 Y = 1 - B/255 K = min(C, M, Y) C' = (C - K) / (1 - K) M' = (M - K) / (1 - K) Y' = (Y - K) / (1 - K)
K (Key/Black) 取三色最小值,代表共同的黑色成分,提取後剩餘為純色成分。function cmyk2rgb($c, $m, $y, $k)
{
$r = 255 * (1 - $c) * (1 - $k);
$g = 255 * (1 - $m) * (1 - $k);
$b = 255 * (1 - $y) * (1 - $k);
return ['r' => round($r), 'g' => round($g), 'b' => round($b)];
}