Imagen generada por PHP GD La imagen no se puede mostrar porque contiene errores en Firefox
Al generar una imagen con PHP, por ejemplo, agregar una marca de agua a una imagen almacenada en el servidor, usar el código siguiente o similar con JPEG en lugar de PNG, es posible que la imagen no se genere y arroje un error directamente visible en Firefox, pero no en Chrome
Este tipo de código, a pesar de trabajar en algunos servidores, ahora podría funcionar en algunos otros, a veces por razones oscuras. En mi caso, funcionó perfectamente bien localmente, pero produjo el error debajo del servidor de Internet, la imagen no se puede mostrar porque contiene errores.
El problema puede provenir de varias razones, estas son algunas de ellas:
- Una salida ya ha sido establecida previamente
- Un error genuino de la generación de imágenes
- Se usa el tipo de imagen equivocado
- La biblioteca de imágenes no está instalada
$stamp = imagecreatefrompng('watermark.png');
if(!$im = imagecreatefrompng('image.png')) die('Error generating image');
$marge_right = $marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
$copyimage = imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));
header('Content-type: image/png');
if(!imagepng($im)) die('Error generating image');
if(!imagedestroy($im)) die('Error generating image');
if(!imagedestroy($stamp)) die('Error generating image');
Una salida ya ha sido establecida previamente
Incluso si no intencionalmente, podría ser el caso, por ejemplo, que otros scripts anteriores contenían espacios al final. Para evitar este error, asegúrese de que, como recomienda PHP, no cierre scripts con la etiqueta PHP final ?>
Luego, antes de usar la función de encabezado, use el siguiente código para asegurarse de que cualquier encabezado previamente configurado se descarte
foreach (getallheaders() as $name => $value) {
header_remove($name);
}
Y también esta función para asegurarse de que no se haya generado ninguna salida antes del encabezado y la imagen
ob_end_clean();
Esto resolvió el problema en mi caso, y la imagen se visualizó correctamente de nuevo:
Un error genuino de la generación de imágenes
En caso de que se haya producido un error real durante la generación de la imagen, asegúrese de que PHP esté configurado para mostrar todos los tipos posibles de errores, y verifique los registros correspondientes, para poder rastrearlo y resolverlo.
El siguiente código hará que PHP informe todos los errores en el registro:
error_reporting(E_ALL);
ini_set('display_errors', '1');
A continuación, puede descubrir que se informaron algunos errores, incluso si no aparecían en el html de salida, debido a la configuración del servidor.
Se usa el tipo de imagen equivocado
Asegúrese de que los tipos de imagen que está utilizando sean correctos, por ejemplo, use este código para distinguir entre png y jpeg.
También asegúrese de que el encabezado sea correcto de acuerdo con la salida utilizada, dependiendo de la función de generación de imágenes utilizada
//to generate png image
header('Content-type: image/png');
if(!imagepng($im)) die('Error generating image');
//to generate jpeg image
header('Content-type: image/jpeg');
if(!imagejpeg($im)) die('Error generating image');
La biblioteca de imágenes no está instalada
Para asegurarse de que las bibliotecas de imágenes estén instaladas. Para hacerlo, ejecute la función phpinfo (); en un script, y verifique el resultado del siguiente valor relacionado con PHP GD, la biblioteca de gráficos que es utilizada por funciones como imagepng ();
En caso de que falten paquetes, la forma de resolverlos depende de su configuración local, agregando el paquete usando los comandos PEAR o usando la solución integrada de host web para la instalación del paquete.
Fuentes
- PHP : adding watermarks to images using alpha channels manual – PHP.net
- PHP : imagepng manual – PHP.net
- PHP : ob_end_clean manual – PHP.net
- PHP : PHP tags – PHP.net
- Debugging : how to get useful error messages in PHP ? – stackoverflow.com
- Need PHP/Pear extension GD – linuxquestions.org
- Image dynamically displayed using PHP functions – www.wcifly.com