Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Konwersja RGB do CMYK
Kshyhoo
post 14.02.2018, 18:26:10
Post #1





Grupa: Opiekunowie
Postów: 3 778
Pomógł: 308
Dołączył: 4.01.2005
Skąd: że




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 = min(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 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 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 (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 = 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 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 = min($c, $m, $y);
  55.  
  56. $c = round(($c - $b) / (255 - $b));
  57. $m = round(($m - $b) / (255 - $b));
  58. $y = round(($y - $b) / (255 - $b));
  59. $k = round($b / 255);
  60.  
  61. return sprintf('%s,%s,%s,%s', $c, $m, $y, $k);
  62. }
  63.  
  64. $cmyk1 = rgb2cmyk1(3, 100, 100);
  65. echo "rgb2cmyk1: ";
  66. print_r($cmyk1);
  67. echo "<br />";
  68. $cmyk2 = rgb2cmyk2(3, 100, 100);
  69. echo "rgb2cmyk2: ";
  70. print_r($cmyk2);
  71. echo "<br />";
  72. $cmyk3 = rgb2cmyk3(3, 100, 100);
  73. echo "rgb2cmyk3: ";
  74. print_r($cmyk3);
  75. echo "<br />";

Co nie tak?


--------------------
Go to the top of the page
+Quote Post
viking
post 14.02.2018, 18:55:12
Post #2





Grupa: Zarejestrowani
Postów: 4 742
Pomógł: 795
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
trueblue
post 14.02.2018, 20:13:42
Post #3





Grupa: Zarejestrowani
Postów: 4 790
Pomógł: 1347
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


  1. function rgb2cmyk($r, $g, $b) {
  2. $c = 1 - ($r / 255);
  3. $m = 1 - ($g / 255);
  4. $y = 1 - ($b / 255);
  5. $k = min($c, min($m, $y));
  6. $c = ($c - $k) / (1 - $k);
  7. $m = ($m - $k) / (1 - $k);
  8. $y = ($y - $k) / (1 - $k);
  9. return array(
  10. 'c' => round($c*100),
  11. 'm' => round($m*100),
  12. 'y' => round($y*100),
  13. 'k' => round($k*100)
  14. );
  15. }
Go to the top of the page
+Quote Post
Kshyhoo
post 14.02.2018, 22:39:05
Post #4





Grupa: Opiekunowie
Postów: 3 778
Pomógł: 308
Dołączył: 4.01.2005
Skąd: że




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) = explode('|', 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?


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.02.2018 - 02:16