Potrzebuję utworzyć obraz w skali szarości w PHP. Nie mówię o indeksowanym obrazie z wartościami skali szarości w jego palecie, ale o PRAWDZIWYM obrazie w skali szarości. Różnica jest w 26 bajta PNG (typu kolor):Tworzenie prawdziwego PNG w skali szarości w PHP
0 - greyscale <-- THIS IS WHAT I NEED
2 - RGB
3 - RGB with palette
4 - greyscale + alpha
6 - RGB + alpha
(Zobacz How to check a PNG for grayscale/alpha color type? dla szczegółów)
próbowałem imagefilter($im, IMG_FILTER_GRAYSCALE);
jak imagetruecolortopalette($im, false, 255);
ale otrzymuję są albo RGB obrazy w skali szarości (kolor typ 2) lub obrazy palety RGB z paletą skali szarości (typ koloru 3). Próbowałem również zainicjować obraz z imagecreate()
zamiast imagecreatetruecolor()
, ale znowu prowadzi to tylko do obrazu palety.
Czy istnieje sposób na utworzenie skali szarości w formacie PNG z funkcjami GD PHP (lub dowolnymi innymi funkcjami w PHP)?
Oto niektóre przykłady różnych obrazów w skali szarości, aby pokazać, co mam na myśli. Wszystkie wyglądają tak samo, ale jeśli otworzysz je w PhotoShop i spojrzysz na ustawienie Image -> Mode, zobaczysz różnicę. Również edytor hex pokaże różnicę w 26 bajt:
RGB, kolor typ 2, 3149 bajtów
palety RGB, kolor typ 3, 3971 bajtów
Prawdziwy obraz w skali szarości, kolor typ 0, 1105 bajtów < - to co muszę
UPDATE 01:
Oto podstawowy kod, którego używam do tworzenia plików PNG. Skomentowane linie to alternatywy, które próbowałem:
//$im = imagecreate($image_size, $image_size);
$im = imagecreatetruecolor($image_size, $image_size);
//imagefilter($im, IMG_FILTER_GRAYSCALE);
//imagetruecolortopalette($im, false, 255);
imagepng($im, $imgPathName);
imagedestroy($im);
Jak wygląda twój kod? – Breezer
@ Breezer: Zobacz "UPDATE 01" w moim OP. – Jpsy
Zgaduję, że szukasz http://php.net/manual/en/function.imagecolorallocate.php Myślę, że ten samouczek pomoże ci po drodze, http://php.about.com/od /gdlibrary/ss/grayscale_gd.htm – Breezer