Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP] Konwersja RGB do CMYK

Napisany przez: Kshyhoo 14.02.2018, 18:26:10

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 smile.gif. Testuję 3 funkcje. Kod:

  1. function rgb2cmyk1($red, $green, $blue) {
  2. $black = http://www.php.net/min(http://www.php.net/min(255 - $red, 255 - $green), 255 - $blue);
  3. if ($black != 255) {
  4. $cyan = (255 - $red - $black) / (255 - $black) * 100;
  5. $magenta = (255 - $green - $black) / (255 - $black) * 100;
  6. $yellow = (255 - $blue - $black) / (255 - $black) * 100;
  7. return http://www.php.net/array(
  8. 'c' => $cyan,
  9. 'm' => $magenta,
  10. 'y' => $yellow,
  11. 'k' => $black,
  12. );
  13. } else {
  14. $cyan = 255 - $red * 100;
  15. $magenta = 255 - $green * 100;
  16. $yellow = 255 - $blue * 100;
  17. return http://www.php.net/array(
  18. 'c' => $cyan,
  19. 'm' => $magenta,
  20. 'y' => $yellow,
  21. 'k' => $black,
  22. );
  23. }
  24. }
  25.  
  26. function rgb2cmyk2($var1,$g=0,$b=0) {
  27. if (http://www.php.net/is_array($var1)) {
  28. $r = $var1['r'];
  29. $g = $var1['g'];
  30. $b = $var1['b'];
  31. } else {
  32. $r = $var1;
  33. }
  34. $cyan = 255 - $r;
  35. $magenta = 255 - $g;
  36. $yellow = 255 - $b;
  37. $black = http://www.php.net/min($cyan, $magenta, $yellow);
  38. $cyan = @(($cyan - $black) / (255 - $black) * 100);
  39. $magenta = @(($magenta - $black) / (255 - $black) * 100);
  40. $yellow = @(($yellow - $black) / (255 - $black) * 100);
  41. return http://www.php.net/array(
  42. 'c' => $cyan,
  43. 'm' => $magenta,
  44. 'y' => $yellow,
  45. 'k' => $black,
  46. );
  47. }
  48.  
  49. function rgb2cmyk3($r,$g,$b) {
  50. $c = 255 - $r;
  51. $m = 255 - $g;
  52. $y = 255 - $b;
  53.  
  54. $b = http://www.php.net/min($c, $m, $y);
  55.  
  56. $c = http://www.php.net/round(($c - $b) / (255 - $b));
  57. $m = http://www.php.net/round(($m - $b) / (255 - $b));
  58. $y = http://www.php.net/round(($y - $b) / (255 - $b));
  59. $k = http://www.php.net/round($b / 255);
  60.  
  61. return http://www.php.net/sprintf('%s,%s,%s,%s', $c, $m, $y, $k);
  62. }
  63.  
  64. $cmyk1 = rgb2cmyk1(3, 100, 100);
  65. http://www.php.net/echo "rgb2cmyk1: ";
  66. http://www.php.net/print_r($cmyk1);
  67. http://www.php.net/echo "<br />";
  68. $cmyk2 = rgb2cmyk2(3, 100, 100);
  69. http://www.php.net/echo "rgb2cmyk2: ";
  70. http://www.php.net/print_r($cmyk2);
  71. http://www.php.net/echo "<br />";
  72. $cmyk3 = rgb2cmyk3(3, 100, 100);
  73. http://www.php.net/echo "rgb2cmyk3: ";
  74. http://www.php.net/print_r($cmyk3);
  75. http://www.php.net/echo "<br />";

Co nie tak?

Napisany przez: viking 14.02.2018, 18:55:12

A to https://github.com/mikeemoo/ColorJizz-PHP? Trochę stare ale raczej nic się tu nie zmienia.

Napisany przez: trueblue 14.02.2018, 20:13:42

  1. function rgb2cmyk($r, $g, $b) {
  2. $c = 1 - ($r / 255);
  3. $m = 1 - ($g / 255);
  4. $y = 1 - ($b / 255);
  5. $k = http://www.php.net/min($c, http://www.php.net/min($m, $y));
  6. $c = ($c - $k) / (1 - $k);
  7. $m = ($m - $k) / (1 - $k);
  8. $y = ($y - $k) / (1 - $k);
  9. return http://www.php.net/array(
  10. 'c' => http://www.php.net/round($c*100),
  11. 'm' => http://www.php.net/round($m*100),
  12. 'y' => http://www.php.net/round($y*100),
  13. 'k' => http://www.php.net/round($k*100)
  14. );
  15. }

Napisany przez: Kshyhoo 14.02.2018, 22:39:05

Działa, dzięki. Znalazłem jeszcze 2 inne sposoby ale podobne problemy: nie obliczają "k".

No bobra, wynikiem mam taką tablicę:

  1. 0300-N|246|245|242|F6F5F2|0|0|2|4
  2. 0500-N|241|239|235|F1EFEB|0|1|2|5
  3. 0502-B|232|237|239|E8EDEF|3|1|0|6

Chcę z tego zrobić tablicę:
  1. foreach($plik as $linia) {
  2. $i++;
  3. 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));
  4. }

No i zatrzymuje się po 4:
  1. 0300-N|246|245|242|||||
  2. 0500-N|241|239|235|||||
  3. 0502-B|232|237|239|||||

Co nie działa?

Napisany przez: viking 19.02.2018, 11:12:54

A co nie tak z klasą którą zalinkowałem?

  1. $red = new RGB(3, 100, 100);
  2. http://www.php.net/echo($red->toCMYK());
  3.  
  4. // 0.9700, 0.0000, 0.0000, 0.6078

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)