2010-07-26 2 views
3

Как преобразовать значение цвета HEX в эквивалент CMYK в php?PHP: HEX to CMYK

Я хочу написать функцию, которая это делает. Но Ive получил никакой подсказки, как не преобразовать шестнадцатеричную в CMYK

eg: 
<?php 

hex2CMYK('#000000'); //result: array('0.0','0.0','0.0','0.0'); 

?> 
+0

Не CYMK черных существ (0, 0, 0, 1)? – kennytm

+0

Kenny: это не только 0, 0, 0, 100 – fabrik

ответ

8
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')); 
+0

Вы должны исправить свою цитату. – Gumbo

+0

@ Gumbo - спасибо за указание, что вне –

+1

Не нужно умножать на 255, а затем делить его перед возвратом. – Omiod