Mam taki mały problem. Robię sobie obrazek, na którym umieszczam tekst a następnie chce go zmodyfikować pixel po pixelu. Skrócony kod poniżej
  1. header("Content-type: image/png");
  2. // Tworze obrazek o rozmiarach $w, $h
  3. $im = imagecreate( $w, $h );
  4. // Tło robię białe
  5. $bgColor = imagecolorallocate( $im, 255, 255, 255 );
  6. imagefill( $im, 0, 0, $bgColor );
  7. // Czarnym kolorem korzystając z czcionki ($font) wpisuje tekst ($code) z uwzględnieniem wcześniej obliczonych parametrów
  8. // (obliczenia dla $fontSize, $angle, $ww, $hh pominąłem gdyż dla problemu nie są istotne );
  9. // Tekst pojawia się tam gdzie powinien i tak jak powienien - tutaj jeszcze wszystko działa;
  10. $txtColor = imagecolorallocate( $im, 0, 0, 0 );
  11. imagettftext( $im, $fontSize, $angle, $ww, $hh, $txtColor, $font, $code );
  12.  
  13. // Problem zaczyna się tutaj gdy chce pokombinować z pikselami
  14. for( $y = 0; $y < $hs; ++$y )
  15. {
  16. // $movaArray[$move] - o tyle pikseli chcę daną "linijkę" przesunąć w lewo - nie istotne dla problemu - to raczej działa;
  17. for( $x = $movaArray[$move]; $x < $w; ++$x )
  18. {
  19. $rgb = imagecolorat( $im, $x, $y );
  20. /*/ // wersja 1
  21.  
  22. $arr = imagecolorsforindex( $im, $rgb );
  23.  
  24. /*/ // wersja 2
  25.  
  26. $arr = array(
  27. 'red' => ($rgb >> 16) & 0xFF,
  28. 'green' => ($rgb >> 8) & 0xFF,
  29. 'blue' => $rgb & 0xFF
  30. );
  31.  
  32. /**/
  33. // Funkcja getIndex oblicza mi index danego pixela - szerokość obrazka * $y + $x - działa bez zarzutów;
  34. imagecolorset( $im, getIndex($im, $x-$move, $y), $rgb['red'], $rgb['green'], $rgb['blue'] );
  35. }
  36. // Dla każdej linii przesunięcie jest inne;
  37. $move = ($move + 1) % count($moveArray);
  38. }
  39.  
  40. // no i na koniec wyświetlam obrazek
  41. imagepng($im);
  42. imagedestroy($im);

i niby wszystko w kodzie wygląda ok ale jako rezultat dostaje cały czarny obrazek (nie zależnie od tego czy jest wersja 1 czy 2 kodu) i nie mam pojęcia dla czego - niby wszystko zgodnie z manualem. Ktoś ma jakiś pomysł? Gdzie zrobiłem błąd?