Generar Imagen dinámica con GD para utilizar de placeholder (Solucionado)

Iniciado por AlbertoBSD, 27 Diciembre 2019, 12:47 PM

0 Miembros y 1 Visitante están viendo este tema.

AlbertoBSD

Se me hace interesante esas paginas que ofrecen solo un servicio como el de imagen placeholder

Para las plantillas de diseño HTML esta muy bien:

Ejemplo:

https://placehold.it/70x70



Yo mismo implemente una imagen así pixeles random:

https://albertobsd.dev/random?format=img&w=70&h=70



Ahora estoy implementando el mismo código en otro sitio y me estoy dando de topes por que no esta funcionando :xD :xD :xD

Código (php) [Seleccionar]
<?php
$h 100;
$w 100;
if(isset($_GET["w"]) && intval($_GET["w"]) > 0) {
$w intval($_GET["w"]);
}
if(isset($_GET["h"]) && intval($_GET["h"]) > 0) {
$h intval($_GET["h"]);
}
$im imagecreate($w$h);
$gray imagecolorallocate ($im 50 50 50 );
imagefill$im ,$w $h $gray );
header("Cache-Control: no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
header("Expires: 0");
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?>


El codigo anterior asi como el siguiente no me arroja imagen alguna, en teoría me debería de arrojar la imagen con fondo gris, peor no hace nada, ya intenten depurando con headers:

Código (php) [Seleccionar]
<?php
$h 100;
$w 100;
if(isset($_GET["w"]) && intval($_GET["w"]) > 0) {
$w intval($_GET["w"]);
}
if(isset($_GET["h"]) && intval($_GET["h"]) > 0) {
$h intval($_GET["h"]);
}
$im imagecreate($w$h);
$gray imagecolorallocate ($im 50 50 50 );
$white imagecolorallocate ($im 255 255 255 );
if(imagefill$im ,$w $h $gray )) {
header("Imagefill: OK");
}
header("Cache-Control: no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
header("Expires: 0");
header("Content-type: image/png");
$tfile tempnam("/tmp","FOO");
if(imagepng($im,$tfile,0)) {
header("Imagepng: OK");
}
if(imagedestroy($im)) {
header("Imagedestroy: OK");
}
header("N: $tfile");
header('Content-Length: ' filesize($tfile));
readfile($tfile);
unlink($tfile);
?>


Y sigue sin hacer absolutamente nada, los headers de depuración están todos y el archivo se crea, intente omitiendo el unlink y haciendo file al archivo temporal desde el shell de linux y todo esta bien:

$ file /tmp/FOOxOdebm
/tmp/FOOxOdebm: PNG image data, 750 x 300, 1-bit colormap, non-interlaced


Headers desde el navegador:



Al final el error va a terminar siendo una tontería pero se me hace interesante que no arroje nada.

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

MinusFour

Código (php) [Seleccionar]
imagefill( $im ,$w , $h , $gray );

No debería ser:

Código (php) [Seleccionar]
imagefill( $im, 0, 0, $gray );

?

AlbertoBSD

Cita de: MinusFour en 28 Diciembre 2019, 17:18 PM
Código (php) [Seleccionar]
imagefill( $im ,$w , $h , $gray );

No debería ser:

Código (php) [Seleccionar]
imagefill( $im, 0, 0, $gray );

?

Sobre los argumentos de la función imagefill tienes toda la razon deben de ser 0,0 para los valores x, y mencionados.

Sin embargo y a pesar de ese error mio, por defecto imagecreate debería de devolver imagen con el fondo negro.




ERROR MIO

El error era que previamente ya había mandado al output un espacio en blanco en alguno de los include donde realizó validaciones previas.

Pensé que no tenia ese problema por que, en teoría los headers que utilice para depuración no se deben de mostrar si ya se mando algo al output.

¿Por que pasa esto? Creo que ese espacio de mas que mande, se anexa al último header mandado por el servidor o por mi.

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

MinusFour

Cita de: AlbertoBSD en 28 Diciembre 2019, 19:35 PM
Sobre los argumentos de la función imagefill tienes toda la razon deben de ser 0,0 para los valores x, y mencionados.

Sin embargo y a pesar de ese error mio, por defecto imagecreate debería de devolver imagen con el fondo negro.




ERROR MIO

El error era que previamente ya había mandado al output un espacio en blanco en alguno de los include donde realizó validaciones previas.

Pensé que no tenia ese problema por que, en teoría los headers que utilice para depuración no se deben de mostrar si ya se mando algo al output.

¿Por que pasa esto? Creo que ese espacio de mas que mande, se anexa al último header mandado por el servidor o por mi.

Saludos!

Puede ser que tengas activado output buffering o algo similar.

AlbertoBSD

Cita de: MinusFour en 28 Diciembre 2019, 20:26 PM
Puede ser que tengas activado output buffering o algo similar.

En efecto mi estimado



Voy a darle una leída a la documentación para tunear bien los valores.

Muchas gracias por tu apoyo.

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW