Necesito crear una imagen en escala de grises en PHP. No estoy hablando de una imagen indexada con valores de escala de grises en su paleta, sino de una imagen VERDADERA en escala de grises. La diferencia está en el byte 26 del (tipo de color) PNG:Crear un PNG verdadero en escala de grises en PHP
0 - greyscale <-- THIS IS WHAT I NEED
2 - RGB
3 - RGB with palette
4 - greyscale + alpha
6 - RGB + alpha
(Ver How to check a PNG for grayscale/alpha color type? para más detalles)
Probé imagefilter($im, IMG_FILTER_GRAYSCALE);
, así como imagetruecolortopalette($im, false, 255);
pero lo único que consigue son o bien RGB imágenes en escala de grises (color tipo 2) o imágenes de paleta RGB con una paleta de escala de grises (tipo de color 3). También traté de inicializar la imagen con imagecreate()
en lugar de imagecreatetruecolor()
, pero nuevamente esto solo conduce a una imagen de paleta.
¿Hay alguna manera de crear un tipo de color 0 PNG en escala de grises con las funciones GD de PHP (o cualquier otra función en PHP)?
Aquí hay algunas muestras de diferentes imágenes en escala de grises para mostrar lo que quiero decir. Todos tienen el mismo aspecto, pero si los abre en PhotoShop y mira la configuración Imagen -> Modo, verá la diferencia. También un editor hexadecimal revelará la diferencia en el byte 26:
RGB, color de tipo 2, 3149 bytes
gama de colores RGB, tipo 3, 3971 bytes imagen en escala de grises verdadera de color
, tipo de color 0, 1105 bytes < - esto es lo que necesito
ACTUALIZACIÓN 01:
Aquí está el código básico que utilizo para crear los PNG. Las líneas comentadas son alternativas que he probado:
//$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);
¿cómo se ve el código hasta ahora? – Breezer
@Breezer: consulte "ACTUALIZACIÓN 01" en mi OP. – Jpsy
Supongo que estás buscando http://php.net/manual/en/function.imagecolorallocate.php Creo que este tutorial te ayudará en el camino, http://php.about.com/od /gdlibrary/ss/grayscale_gd.htm – Breezer