Foros del Web » Programando para Internet » PHP »

Cómo puedo hacer estos thumbnails?

Estas en el tema de Cómo puedo hacer estos thumbnails? en el foro de PHP en Foros del Web. Tengo este código para mostrar la información de la bd, unos datos y cuatro imagenes: Código PHP: <?php  //Esta consulta muestra 3 articulos por página de un total de 10 articulos echo  "<table align=center border=1>" ; mysql_connect ( "localhost" ...
  #1 (permalink)  
Antiguo 11/12/2004, 03:29
mon
 
Fecha de Ingreso: febrero-2003
Mensajes: 506
Antigüedad: 21 años, 2 meses
Puntos: 0
Cómo puedo hacer estos thumbnails?

Tengo este código para mostrar la información de la bd, unos datos y cuatro imagenes:

Código PHP:
<?php 
//Esta consulta muestra 3 articulos por página de un total de 10 articulos
echo "<table align=center border=1>";
mysql_connect("localhost","root","") or die ("no se ha podido conectar a la BD"); 
mysql_select_db("inmobiliaria") or die ("no se ha podido seleccionar la BD"); 
$id=$_GET['id'];
if (
$id!="")
{
    
$sql "SELECT * FROM pisos_venta WHERE ID<=".$id." ORDER BY ID DESC";
}
else
{
    
$sql "SELECT * FROM pisos_venta ORDER BY ID DESC";
}
$consulta mysql_query($sql) or die ("No se pudo ejecutar la consulta"); 
$i=0;

echo 
"<center>";
While ((
$i<3) and $registro=mysql_fetch_assoc($consulta)  )


    echo 
"<td>Ref...".$registro['referencia']."</td><br>";
    echo 
"<td>".$registro['fecha']."</td><br>";
    echo 
"<tr>"
    echo 
"<td>".$registro['descripcion']."</td>"
    echo 
"<tr>"
    echo 
"<td><img src='".$registro['imagen1']."'>"
    echo 
"<td><img src='".$registro['imagen2']."'>";
    echo 
"<td><img src='".$registro['imagen3']."'>";
    echo 
"<img src='".$registro['imagen4']."'></td>";
    
    
$i=$i 1;
}
$registro_tmp=$registro=mysql_fetch_assoc($consulta);
if (
$id!="")
{
    
$sql "SELECT * FROM pisos_venta WHERE ID>".$id." ORDER BY ID asc";
    
$consulta mysql_query($sql) or die ("No se pudo ejecutar la consulta"); 
    
$i=0;
    While ((
$i<10) and $registro=mysql_fetch_assoc($consulta)  )
    { 
        
$id=$registro['id'];
        
$i=$i+1;
        
$entraEnElBucle="si";
    }
    
    if (
$entraEnElBucle!="")
        echo 
"<a href='consulta.php?id=".($id)."'>Pagina Anterior &nbsp;&nbsp;&nbsp;</a>";

if (
$registro_tmp)
{
    echo 
"<a href='consulta.php?id=".$registro_tmp['id']."'> Siguiente Pagina</a>";
}
Cómo hago para que en vez de mostrar esas imagenes me muestre unos thumbnails de altura por ejemplo 125, tengo este otro código
Código PHP:
function thumbjpeg($imagen,$altura) { 
     
// Lugar donde se guardarán los thumbnails respecto a la carpeta donde está la imagen "grande". 
     
$dir_thumb "minis/"
     
// Prefijo que se añadirá al nombre del thumbnail. Ejemplo: si la imagen grande fuera "imagen1.jpg", 
     // el thumbnail se llamaría "mini_imagen1.jpg" 
     
$prefijo_thumb "mini_"

     
// Aquí tendremos el nombre de la imagen. 
     
$nombre=basename($imagen); 
     
// Aquí la ruta especificada para buscar la imagen. 
     
$camino=dirname($imagen)."/temporal/thumbs/"

     
// Intentamos crear el directorio de thumbnails, si no existiera previamente. 
     
if (!file_exists($camino.$dir_thumb)) 
          @
mkdir ($camino.$dir_thumb0777) or die("No se ha podido crear el directorio ".$camino.$dir_thumb); 

     
// Aquí comprovamos que la imagen que queremos crear no exista previamente 
     
if (!file_exists($camino.$dir_thumb.$prefijo_thumb.$nombre)) { 
          echo 
$camino.$dir_thumb.$prefijo_thumb.$nombre." NO existía<br>\n"
          
$img = @imagecreatefromjpeg($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>\n"); 

          
// miramos el tamaño de la imagen original... 
          
$datos getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>\n"); 

          
// intentamos escalar la imagen original a la medida que nos interesa 
          
$ratio = ($datos[1] / $altura); 
          
$anchura round($datos[0] / $ratio); 

          
// esta será la nueva imagen reescalada 
          
$thumb imagecreatetruecolor($anchura,$altura); 

          
// con esta función la reescalamos 
          
imagecopyresampled ($thumb$img0000$anchura$altura$datos[0], $datos[1]); 

          
// voilà la salvamos con el nombre y en el lugar que nos interesa. 
          
imagejpeg($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre); 
     } 
}
   
thumbjpeg($imagen1150);
   
thumbjpeg($imagen2150);
   
thumbjpeg($imagen3150);
   
thumbjpeg($imagen4150); 
que me crea unos thumbnails y funciona perfectamente pero no sé cómo aplicarlo para que me lo haga en la consulta a la bd y a la vez me los muestre para luego poder hacer click sobre ellos y en la misma pagina en un lateral salga la imagen grande, no sé como hacer referencia a los campos imagen1, imagen2, etc... de la bd, ¿se pueden unir estos dos códigos para hacer lo que yo quiero? a ver si me podeis hechar una mano gracias de antemano
  #2 (permalink)  
Antiguo 11/12/2004, 03:57
Avatar de baklao  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Ana - Isla de Margarita
Mensajes: 482
Antigüedad: 19 años, 5 meses
Puntos: 0
Hola que tal este es un ejemplo tomado de la pagina maestros del web.

Para el ejemplo utilizare una como formato de imagen el GIF, primero presentare el código y luego la explicación línea por línea al igual que como hacerlo con diferentes formatos de imagen.

Supongo que el nombre del archivo es imagen.php

Código PHP:
<?php 
//Una Creacion De Jorge Luis Martinez M 
//http://misCodigos.jlmnetwork.com/ 
/*Este Archivo Recibe Los Parametros $ruta, Que Es La Ruta Interna De La Imagen En El Servidor, Y Los Parametros $ancho y $alto Que Se Refiere Al Alto Y Ancho De La Previsualizacion.*/ 

$fuente = @imagecreatefromgif($ruta); 
$imgAncho imagesx ($fuente); 
$imgAlto =imagesy($fuente); 
$imagen ImageCreate($ancho,$alto); 

ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto); 

Header("Content-type: image/gif"); 
imageGif($imagen); 

?>
--------------------------------------------------------------------------
Nota: La explicación la hago suponiendo un conocimiento básico de php por parte del lector.
--------------------------------------------------------------------------
Lo primero es recordar que este archivo recibe los parámetros $ruta que es la ruta interna de la imagen en el servidor, entonces si el fichero imagen.php se encuentra en:

http://www.servidor.com/cuenta/imagen.php

Y la imagen, en este caso supondremos el nombre "01.gif", se encuentra en:

http://www.servidor.com/cuenta/galeria/01.gif

A imagen.php sólo le pasaremos galeria/01.gif como valor de ruta:

http://www.servidor.com/cuenta/image...galeria/01.gif

Pero esto no es todo, recordemos que recibe otros dos parámetros, los cuales son alto y ancho, estos no se refieren al alto y ancho de la imagen original, se refieren al alto y ancho que queremos la previsualización (Thumbnail), entonces si queremos que nos devuelva la imagen 01.gif, ubicada en el directorio galeria y cuyo tamaño original es de 400 píxeles de anchura y 300 píxeles de altura pero queremos la previsualización de 200 píxeles de anchura y 150 píxeles de altura tendriamos que llamarla de esta manera:

http://www.servidor.com/cuenta/image...o=200&alto=150

--------------------------------------------------------------------------
Nota: Obviamente si lo llamamos para presentarlo como imagen dentro de un archivo al usuario(.html, .php, etc), lo llamamos mediante el tag IMG:
<IMG SRC="http://www.servidor.com/cuenta/imagen.php?ruta=galeria/01.gif&ancho=200&alto=150">
--------------------------------------------------------------------------

Ahora que ya sabemos como llamar a la imagen, vamos a ver como se hace la previsualización (Thumbnail), como es que se crea desde una imagen más grande una imagen más pequeña tanto en píxeles como en tamaño para su presentación al usuario.

Primero creamos una copia de la imagen desde archivo, la igualamos a $fuente, ya que allí quedará un identificador de tipo ENTERO (INT) para dirigirnos a la imagen creada, esto es necesario ya que será de esta imagen que haremos la previsualización (Thumbnail).

$fuente = @imagecreatefromgif($ruta);

--------------------------------------------------------------------------
Nota: Recuerde que el @imagecreatefromgif() es para imagenes gif, si quiere crear jpeg o png solamente cambie el gif:
@imagecreatefromjpeg($ruta) ó @imagecreatefrompng($ruta)
--------------------------------------------------------------------------

Ahora obtendremos la anchura y altura de la imagen original, esto es necesario para poder hacer la copia de la imagen, para ello utilizamos las funciones imageSX y imageSY, que reciben como parametro un identificador de imagen (en este caso $fuente, que es el identificador de la imagen original) y devuelven la anchura y altura de la imagen respectivamente.

$imgAncho = imagesx ($fuente);
$imgAlto =imagesy($fuente);


Ahora creamos una imagen nueva en blanco con la anchura y altura que queremos para la previsualización (Thumbnail) y que será la que se le devuelva al usuario cuando se le llame, ya sea directamente en el browser o por medio de la etiqueta IMG de html.

$imagen = ImageCreate($ancho,$alto);



Ahora lo más importante, copiaremos la imagen original a la imagen nueva, lo cual hará que al tener un menor tamaño (la imagen nueva), la copia de que hacemos de la original se ajustara al tamaño de esta.

Utilizamos la funcion ImageCopyResized() la cual sirve para copiar "partes" de una imagen a otra por medio de coordenadas, pero en nuestro caso no necesitamos un pedazo, necesitamos copiar toda la imagen en todo el espacio de la nueva imagen, por ello damos las coordenadas totales de las imágenes.

Esto puede sonar un poco confuso, por eso es mejor que mires la documentacion oficial en http://www.php.net/ para información sobre los parametros que recibe esta función.

ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$a lto,$imgAncho,$imgAlto);

Listo, ya tenemos nuestra imagen, ahora debemos indicarle al navegador que vamos a devolver una imagen de tipo gif, para ello enviamos la cabecera diciendo el tipo de contenido que enviaremos al navegador.

Header("Content-type: image/gif");

--------------------------------------------------------------------------
Nota: Recuerde, si el formato es jpeg o png solamente cambie el gif:
image/jpeg ó image/png
--------------------------------------------------------------------------

Ahora devolvemos la imagen directamente al browser(navegador) del usuario.

imageGif($imagen);

--------------------------------------------------------------------------
Nota: Recuerde, si el formato es jpeg o png solamente cambie el gif: imageJpeg($imagen) o imagePng($imagen)
--------------------------------------------------------------------------

Bien espero haya quedado claro, pero vamos a ver otro aspecto, que tal si no queriamos devolver la imagen, lo que queriamos era guardar la nueva imagen (Thumbnail) en el servidor, para su uso posterior?...

Al ponerle un segundo parametro al imageGif($imagen,"imagenPequena.gif"), Lo lograremos, en este caso guardaria la imagen que acabamos de crear en el servidor, especificamente en la misma carpeta con el nombre de "imagenPequena.gif".

Esto puede ser muy util, ya que si queremos crear thumbnails de todas las imagenes en un directorio, podemos hacer un loop que lea los archivos del directorio, y repita el proceso anterior(de crear imagen en blanco y copiar) y guarde las nuevas imagenes para su uso posterior, realmente es una herramienta con muchos usos.

--------------------------------------------------------------------------
Nota: Cabe recordar que su servidor tiene que tener soporte para manipular imágenes, según el tipo que desee utilizar, en caso de no tenerlo el servidor le dará un mensaje de error como "Jpeg is no support..." dependiendo del formato de imagen.
--------------------------------------------------------------------------

Espero que te sirva de ayuda para hacer lo que quieres

Salu2. y Suerte

Bye
__________________
Atte. Mohamed :aplauso:
  #3 (permalink)  
Antiguo 11/12/2004, 04:42
mon
 
Fecha de Ingreso: febrero-2003
Mensajes: 506
Antigüedad: 21 años, 2 meses
Puntos: 0
Lo primero darte las gracias por tu ayuda, lo segundo decirte que soy todavía muy novato en el php, no termino de entender lo que pone ese código, yo creo que ahí puedes hacer eso pero con una imagen determinada de la cual tienes el nombre (imagen.gif) pero yo necesito que me haga eso pero a la hora de hacer una consulta a la bd osea necesito que me muestre un thumbnail de lo que hay en imagen1, etc. si los campos que están destinados a contener el path de las fotos se llaman imagen1, imagen2, imagen3, imagen4 y que el path es temporal/thumbs/elnombredelaimagen.jpg pues tengo que hacerlo sobre imagen1,imagen2,imag....etc, no sobre el path porque cuando vuelvan a subir 100 fotos más que hago?, no sé si me entiendes, tal vez sea que el que no lo entiende soy yo será lo más probable, yo lo que veo es que sigo teniendo el mismo problema que con el código que yo tengo, que no sé hacer referencia a las fotos que en el momento de la consulta les toque, osea que no puedo usar eso con el nombre de la foto nombrefoto.jpg porque sinó debería de hacerlo con todas las fotos de una carpeta pero cuando actualicen y suban más?, no se si me acabas de entender de todad formas muchas gracias y perdona la molestia

Última edición por mon; 11/12/2004 a las 04:43
  #4 (permalink)  
Antiguo 11/12/2004, 05:44
mon
 
Fecha de Ingreso: febrero-2003
Mensajes: 506
Antigüedad: 21 años, 2 meses
Puntos: 0
Vamos a ver he probado el código que me diste de forma individual para intentar entender el funcionamiento haciendo referencia al nombre de una imagen determinada en una carpeta determinada, lo he convertido a mi necesidad, uso una imagen en jpg así que cambié como dice en el código y lo puse así, no sé si estará bien:
Código PHP:
<?php 
//Una Creacion De Jorge Luis Martinez M 
//http://misCodigos.jlmnetwork.com/ 
/*Este Archivo Recibe Los Parametros $ruta, Que Es La Ruta Interna De La Imagen En El Servidor, Y Los Parametros $ancho y $alto Que Se Refiere Al Alto Y Ancho De La Previsualizacion.*/ 

$fuente = @imagecreatefromjpeg($ruta); 
$imgAncho imagesx ($fuente); 
$imgAlto =imagesy($fuente); 
$imagen ImageCreate($ancho,$alto); 

ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$a  lto,$imgAncho,$imgAlto); 

Header("Content-type: image/jpeg"); 
imagejpeg($imagen); 

?>
Después en otra página puse:
Código PHP:
<IMG SRC="http://localhost/inmobiliaria/imagen.php?ruta=temporal/thumbs/mon.jpg&ancho=200&alto=150"
Pero me sale la cruz de no encontrar la imagen, debo estar poniendo mal la ruta, el archivo imagen.php está en la carpeta inmobiliaria y la imagen mon.jpg está en una carpeta llamada thumbs que está a su vez dentro de otra llamada temporal que a su vez está en inmobiliaria osea, inmobiliaria/temporal/thumbs/mon.jpg, he mirado y tengo el tema de GD2 bien, más o menos he comprendido como funciona ahora tengo que cambiar el nombre de la foto por lo que necesito, cosa muy dificil pero a ver que saco, tengo que decir que si pongo en el navegador http://localhost/inmobiliaria/imagen...o=200&alto=150
me salen solo caracteres ilegibles y ni rastro de la imagen,
alguien me puede decir donde tengo el fallo para que no me la muestre? gracias

Última edición por mon; 11/12/2004 a las 05:47
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:00.