Nie mogę poradzić sobie z konwersją RGM do CMYK, proszę o pomoc. Z rgb(3, 100, 100) powinienem otrzymać cmyk(97%, 0%, 0%, 61%) a otrzymuję cmyk(97%, 0%, 0%, 155%). 55% normy więcej . Testuję 3 funkcje. Kod:
function rgb2cmyk1($red, $green, $blue) { $black = http://www.php.net/min(http://www.php.net/min(255 - $red, 255 - $green), 255 - $blue); if ($black != 255) { $cyan = (255 - $red - $black) / (255 - $black) * 100; $magenta = (255 - $green - $black) / (255 - $black) * 100; $yellow = (255 - $blue - $black) / (255 - $black) * 100; return http://www.php.net/array( 'c' => $cyan, 'm' => $magenta, 'y' => $yellow, 'k' => $black, ); } else { $cyan = 255 - $red * 100; $magenta = 255 - $green * 100; $yellow = 255 - $blue * 100; return http://www.php.net/array( 'c' => $cyan, 'm' => $magenta, 'y' => $yellow, 'k' => $black, ); } } function rgb2cmyk2($var1,$g=0,$b=0) { if (http://www.php.net/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 = http://www.php.net/min($cyan, $magenta, $yellow); $cyan = @(($cyan - $black) / (255 - $black) * 100); $magenta = @(($magenta - $black) / (255 - $black) * 100); $yellow = @(($yellow - $black) / (255 - $black) * 100); return http://www.php.net/array( 'c' => $cyan, 'm' => $magenta, 'y' => $yellow, 'k' => $black, ); } function rgb2cmyk3($r,$g,$b) { $c = 255 - $r; $m = 255 - $g; $y = 255 - $b; $b = http://www.php.net/min($c, $m, $y); $c = http://www.php.net/round(($c - $b) / (255 - $b)); $m = http://www.php.net/round(($m - $b) / (255 - $b)); $y = http://www.php.net/round(($y - $b) / (255 - $b)); $k = http://www.php.net/round($b / 255); return http://www.php.net/sprintf('%s,%s,%s,%s', $c, $m, $y, $k); } $cmyk1 = rgb2cmyk1(3, 100, 100); http://www.php.net/echo "rgb2cmyk1: "; http://www.php.net/print_r($cmyk1); http://www.php.net/echo "<br />"; $cmyk2 = rgb2cmyk2(3, 100, 100); http://www.php.net/echo "rgb2cmyk2: "; http://www.php.net/print_r($cmyk2); http://www.php.net/echo "<br />"; $cmyk3 = rgb2cmyk3(3, 100, 100); http://www.php.net/echo "rgb2cmyk3: "; http://www.php.net/print_r($cmyk3); http://www.php.net/echo "<br />";
A to https://github.com/mikeemoo/ColorJizz-PHP? Trochę stare ale raczej nic się tu nie zmienia.
function rgb2cmyk($r, $g, $b) { $c = 1 - ($r / 255); $m = 1 - ($g / 255); $y = 1 - ($b / 255); $k = http://www.php.net/min($c, http://www.php.net/min($m, $y)); $c = ($c - $k) / (1 - $k); $m = ($m - $k) / (1 - $k); $y = ($y - $k) / (1 - $k); return http://www.php.net/array( 'c' => http://www.php.net/round($c*100), 'm' => http://www.php.net/round($m*100), 'y' => http://www.php.net/round($y*100), 'k' => http://www.php.net/round($k*100) ); }
Działa, dzięki. Znalazłem jeszcze 2 inne sposoby ale podobne problemy: nie obliczają "k".
No bobra, wynikiem mam taką tablicę:
0300-N|246|245|242|F6F5F2|0|0|2|4 0500-N|241|239|235|F1EFEB|0|1|2|5 0502-B|232|237|239|E8EDEF|3|1|0|6
foreach($plik as $linia) { $i++; list($c_ncs, $c_r, $c_g, $c_b, $c_hex, $c_c, $c_m, $c_y, $c_k) = http://www.php.net/explode('|', http://www.php.net/trim($linia)); }
0300-N|246|245|242||||| 0500-N|241|239|235||||| 0502-B|232|237|239|||||
A co nie tak z klasą którą zalinkowałem?
$red = new RGB(3, 100, 100); http://www.php.net/echo($red->toCMYK()); // 0.9700, 0.0000, 0.0000, 0.6078
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)