PHP - Generar miniaturas

 
Vista:

Generar miniaturas

Publicado por Eduardo Sánchez  (13 intervenciones) el 24/02/2010 23:15:11
Hola a todos y antes que nada gracias por leer mi tema.

Resulta que estoy haciendo una página donde puedan mostrarse las imégenes en pequeño, es decir tengo las imágenes "grendes" en una carpeta, las coje de ahí y las redimensiona.
Lo que hago es pasar un parámetro con la ruta de la imagen que está en una bbdd a un archovo llamado miniatura.php, éste archivo devuelve la imagen ya redimensionada y la muestra.
Escribo y comento un poco el código:

Porción de la página que muestra el listado de imágenes:

<?php
$nombre2=$row_listado['foto'];
$nombre2="miniatura.php?nombre=img/grandes/" . $nombre2;
?>

<img src="<?php echo $nombre2; ?>" />

Lo que hago es declarar la variable nombre2 que coje el nombre de la imagen por ejemplo 001.jpg, después concatena la ruta donde estan las imágenes con el nombre de la imagen y esto lo pasa como parámetro a miniatura.php y lo vuelve a gusrdar como nombre2, de modo que lo que muestra despues es nombre2, es decir la imagen devuelta por el archivo miniatura.php

Archivo miniatura.php

<?php
//ancho y alto de la miniatura
$ancho=100;
$alto=100;
//recibir el nombre de la imagen
$nombre=$_GET['nombre'];
//poner imagen original en memoria
$original=imagecreatefromjpeg($nombre);
//analizar el tamaño de la imagen
$tam=getimagesize($original);
$ancho_original=$tam[0];
$alto_original=$tam[1];
//calcular el factor de escala
$escala_1=1;
$escala_2=1;
$escala_1=$ancho/$ancho_original;
$escala_2=$alto/$alto_original;
//ver si la imagen es horizontal o vertical compararando el alto y el ancho
if($alto_original >$ancho_original)
$escala_1=$escala_2;
//calcular nuevo tamaño
$imagen_hori=ceil($ancho_original*escala_1);
$imagen_vert=ceil($alto_original*escala_1);
//crear imagen pequeña vacía con el nuevo tamaño
$final=imagecreatetruecolor($imagen_hori,$imagen_v ert);
//copiar el original en la pequeña escalada
imagecopyresized($final,$original,0,0,0,0,$imagen_ hori,$imagen_vert,imagesx($original),imagesy($orig inal));
//mostrar la imagen
Header("content-type:image/jpg");Imagejpeg($final);
imagedestroy($final);
?>

El problema es que cuando hace el listado no muestra las imagenes, sale el símbolo X como si no la encontrara.
¿¿Alguien sabe donde puede estar el error??

Muuchasssss gracias de antemano !!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Generar miniaturas

Publicado por Diego Romero (1450 intervenciones) el 24/02/2010 23:57:43
No he probado el código, pero me inclinaría por verificar que la ruta generada en $nombre2 sea correcta. Quizá estás apuntando a un path que no existe a partir del lugar donde está el <img>.

Por otro lado creo que sería mejor que lo hagas así:

<?php
$nombre2=$row_listado['foto'];
$nombre2="img/grandes/" . $nombre2;
?>

<img src="miniatura.php?nombre=<?php echo $nombre2; ?>" />
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Generar miniaturas

Publicado por Eduardo Sánchez  (13 intervenciones) el 25/02/2010 00:27:08
Hola Diego, muchas gracias por responderme, lo he hecho tal y como me has dicho tu, de esa forma, así la definición de las variables es mas sencilla, pero me sigue igual.
Mira la página está colgada aquí,

http://www.buscamospiso.es/procauto/listado.php

ahi puedes ver que la ruta la genera correctamente, pero la imagen no sale.
¿Es raro verdad?

Muchas gracias de nuevo y un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Generar miniaturas

Publicado por Diego Romero (1450 intervenciones) el 25/02/2010 07:46:39
Efectivamente, la imagen está donde se supone que debe estar. Esto me llevó a estudiar más detenidamente el script en cuestión y descubro este par de líneas:

$original=imagecreatefromjpeg($nombre);

$tam=getimagesize($original);

La función getimagesize() no espera un recurso sino un nombre de archivo. Ahí está el problema. Creo que debería ser:

$tam=getimagesize($nombre);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Generar miniaturas

Publicado por Eduardo Sánchez  (13 intervenciones) el 25/02/2010 09:40:07
Diego he probao lo que me has dicho de la funcion getimagesize poniendo $tam=getimagesize($nombre); y nada sigue igual , de todas formas en el curso que he hecho sale así como yo lo tenía y en el ejemplo del curso si funciona.
Macho no se que puede ser, ¿ has visto la página en funcionamiento? esta en la dirección:
http://www.buscamospiso.es/procauto/listado.php

ahí si miras el codigo fuente se ve que genera la llamada correctamente.
No sabes cuanto te agradezco su ayuda pero no consigo solucionarlo, no creo que sea un problema de ruta, si piensas que puede ser alguna tontería o quisieras verlo mejor mandame un mail a [email protected] y te doy el acceso FTP para que puiedas ver que la carpeta de imagenes está en su sitio y descartar el problema de ruta.

Muchas gracias de nuevo por tu interés, si vienes por granada cuenta con unas cervezitas eh?? jejejej
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Generar miniaturas

Publicado por Diego Romero (1450 intervenciones) el 25/02/2010 16:35:34
Sé que el problema está en el script que genera la miniatura porque si cargas en el navegador:

http://www.buscamospiso.es/procauto/miniatura.php?nombre=img/grandes/1.jpg

Que es el path y el parámetro para generar la miniatura. Aparecen los mensajes de error que miniatura.php está generando y por eso no ves ninguna imagen.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Generar miniaturas

Publicado por Eduardo Sánchez  (13 intervenciones) el 25/02/2010 19:27:21
ah vale vale, entonces revisaré ese código con detenimiento a ver si saco donde esta el fallo.

Muchas gracias Diego.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Generar miniaturas

Publicado por Eduardo Sánchez  (13 intervenciones) el 25/02/2010 20:13:21
Diego en los mensajes de error me sale un primer error que es el culpable de los dos o tres que vienen despues creo.
El mensaje es:
Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in ....../buscamospiso/procauto/miniatura.php on line 25

Es decir que por lo visto la funcion imagecreatetruecolor no recibe unos parámetros válidos de ancho y alto.
viendo el codigo que puse al principio ¿sabes a que puede deberse? creo que los valores son válidos, la funcion recibe los valores $imagen_hoi y $imagen_vert es decir al horizontal y el vertical.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Generar miniaturas

Publicado por Eduardo Sánchez  (13 intervenciones) el 26/02/2010 11:29:55
Diego !!!!
como te diga donde estaba el fallo me matas !! jajajajaj

Mira en el código de generación de miniaturas las líneas:

//calcular nuevo tamaño

$imagen_hori=ceil($ancho_original*escala_1);
$imagen_vert=ceil($alto_original*escala_1);

Faltaba el símbolo $ delante de escala_1, y estaría mutiplicando por sabe dios el que !!
Me he dao cuenta depurando el cógigo paso a paso y mostrando las variables en el navegador y ahí vi que salian cosas raras.
En fin para colgarme !!
Muchisimas gracias por tu ayuda porque me ha sido de mucha utilidad.

Un cordial saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Generar miniaturas

Publicado por Diego Romero (1450 intervenciones) el 26/02/2010 17:27:58
Al mejor cazador también se le escapa la liebre :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar