Thumnails jpeg en negro, pero sólo algunas.

Iniciado por El Benjo, 5 Junio 2015, 21:34 PM

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

El Benjo

Hola, buen día. El día de ayer hice un script que hace uso de imagecreatefromjpeg() e imagecopyresampled() para generar miniaturas. En mi servidor local crea las imágenes a la perfección, sin embargo en el servidor de mi proveedor de hosting unas imágenes las genera bien y otras no. Ahora bien, siempre son las mismas imágenes.

versión PHP local: 5.2

versión PHP proveedor hosting: 5.4.25
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

MinusFour

Sin saber que imágenes son y sin ver el código difícil de saber.

El Benjo

No coloqué el código porque me pareció innecesario, pues la cuestión (a mi parecer) tiene más que ver con factores externos como la versión de PHP o el formato JPEG que con el código en si. De todas maneras aquí les dejo el código. y la dirección de la página donde lo implemento.

Código (php) [Seleccionar]
/ >> Si no existe la miniatura, la genero.
$Info_Imagen = getimagesize($_GET['Galeria']."/".$ARR_Todos[$Contador]);
switch($Info_Imagen[2])
{
case 1:
$Original = imagecreatefromgif($_GET['Galeria']."/".$ARR_Todos[$Contador]);
break;
case 3:
$Original = imagecreatefrompng($_GET['Galeria']."/".$ARR_Todos[$Contador]);
break;
case 2:
$Original = imagecreatefromjpeg($_GET['Galeria']."/".$ARR_Todos[$Contador]);
break;
case 6:
$Original = imagecreatefromwbmp($_GET['Galeria']."/".$ARR_Todos[$Contador]);
break;
}
// >> Redimensiono y guardo la miniatura.
$Miniatura = imagecreatetruecolor(128, 128);
if($Info_Imagen[0] < $Info_Imagen[1])
{
$Relacion = $Info_Imagen[0] / 128;
}else{
$Relacion = $Info_Imagen[1] / 128;
}
imagecopyresampled($Miniatura, $Original, 0, 0, 0, 0, 128, 128, 128 * $Relacion, 128 * $Relacion);
switch($Info_Imagen[2])
{
case 1:
imagegif($Miniatura, "Imagenes/Miniaturas_Galeria/".$ARR_Todos[$Contador]);
break;
case 3:
imagepng($Miniatura, "Imagenes/Miniaturas_Galeria/".$ARR_Todos[$Contador]);
break;
case 2:
imagejpeg($Miniatura, "Imagenes/Miniaturas_Galeria/".$ARR_Todos[$Contador]);
break;
case 6:
imagewbmp($Miniatura, "Imagenes/Miniaturas_Galeria/".$ARR_Todos[$Contador]);
break;
}


Ruta de la implementación:

http://novena-noche-prueba.byethost12.com/?Contenido=Galeria&Galeria=Imagenes/Galeria/Pinturas

Notarán que en el enlace de arriba aparece una imagen en negro. Y siempre es esa imagen la que no se redimensiona.
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

MinusFour

Parece que algunas de las imagenes GD no las puede parsear correctamente no se si estén dañadas o el formato sea diferente o algo así. De hecho, php me seguia advirtiendo de un error recuperable blah blah y tuve que agregar:

Código (php) [Seleccionar]

ini_set('gd.jpeg_ignore_warning', true);


Pero no se si esto te ayude. A pesar de los errores, GD si pudo crear la imagen aunque yo estoy en PHP 5.6.

El Benjo

Mmmmmm, pues precisamente esa es mi duda, de por qué en algunas versiones de PHP se puede hacer y en otras no, y qué alternativas tengo ante este problema. Pues como pueden ver la versión de mi proveedor es más reciente que la mía y esa es precisamente la del problema.
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

MinusFour

#5
Cita de: El Benjo en  7 Junio 2015, 07:04 AM
Mmmmmm, pues precisamente esa es mi duda, de por qué en algunas versiones de PHP se puede hacer y en otras no, y qué alternativas tengo ante este problema. Pues como pueden ver la versión de mi proveedor es más reciente que la mía y esa es precisamente la del problema.

Pues no estoy muy seguro que sea GD, creo que tiene que ver con alguna otra configuracion de PHP. A pesar del error, la imagen si se pudo recrear. Yo probaría directamente solo con esa imagen.

Código (php) [Seleccionar]

header('Content-type: image/jpeg');
ini_set('gd.jpeg_ignore_warning', true);
$file = '10999767_415400128623803_4277907763891692236_o.jpg'
$info = getimagesize($file);
$img = imagecreatefromjpeg($file);

$min = imagecreatetruecolor(128,128);
imagecopyresampled($min, $img, 0, 0, 0, 0, 128, 128, $info[0], $info[1]);
imagejpeg($min);


Este es el script de prueba que tenia en mi maquina con PHP 5.6. Es bastante directo, solo tienes que modificar $file por el nombre del archivo que quieras probar. Y despues lo ejecutas desde el navegador y debería darte la miniatura. Pruebalo con alguna imagen que te falle. En mi caso yo probe con:



De hecho, con esa imagen incluso mi navegador de firefox actua de manera extraña. A pesar de todo:


El Benjo

Lo siento, no me supe explicar. Sí el error está resuelto gracias a la linea de código que me pasaste, muchas gracias por eso. Pero me seguía intrigando el porqué de dicho error.

Al parecer se debe a la forma en que la librería GD trabaja con las imágenes y es que, a pesar de que las aplicaciones des escritorio trabajan bien con las imágenes que contienen pequeños errores en su codificación, GD no lo hace así, al parecer tien problemas en el tratamiento de este error.

De nuevo, muchas gracias por la ayuda.
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.