Crear imagenes Thumbnail con script php

Actualizado el domingo, 19 junio, 2016

Lo primero, debemos asegurarnos que la librería GD y php este instalada en el servidor, para poder crear thumbnails. Este script consta de dos funciones, la primera escaneará un directorio en busca de cualquier imagen en formato «.jpg», para cada una de las búsquedas se crea un thumbnail en un directorio con la ayuda de la librería GD, la segunda función crea un archivo HTML en el mismo directorio en el que se encuentra el script, esta página contendrá todas las imágenes (versión thumbnail) y el correspondiente enlace a la imagen original. La utilidad de este script es muy sencilla con una cuantas mejoras puede convertirse en una buena galería para nuestras imágenes preferidas.

El código que viene a continuación es una función llamada crearthumb a la que tendremos que dar tres parámetros, los dos primeros parámetros corresponden a las rutas de los directorios que contendrán las imágenes originales y los thumbnails de estas. El tercer parámetro es el ancho que queremos para nuestros thumbnails, ¿por qué no hace falta el ancho? la respuesta es sencilla porque de esa manera estaríamos redimensionando las imágenes y no conservarían su aspecto original.

<?php 
function crearthumb ( $pathToImages, $pathToThumbs, $thumbWidth ) 
{ 
// abrimos el directorio 
$dir = opendir( $pathToImages ); 

// bucle en busca de archivos jpg 
while (false !== ($fname = readdir( $dir ))) { 
$info = pathinfo($pathToImages . $fname); 
// continua unicamente si la imagen es jpg 
if ( strtolower($info['extension']) == 'jpg' ) 
{ 
echo "Creando thumbnail para {$fname} 
"; 

// carag y devuelve las medidas de la imagen 
$img = imagecreatefromjpeg( "{$pathToImages}{$fname}" ); 
$width = imagesx( $img ); 
$height = imagesy( $img ); 

// calcula el tamaño 
$new_width = $thumbWidth; 
$new_height = floor( $height * ( $thumbWidth / $width ) ); 

// crea una nueva imagen de manera temporal 
$tmp_img = imagecreatetruecolor( $new_width, $new_height ); 

// copia y dedimensiona la nueva imagen en la temporal que hemos creado 
imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height ); 

// guarda el thumbnail en un archivo 
imagejpeg( $tmp_img, "{$pathToThumbs}{$fname}" ); 
} 
}
// cierra el directorio 
closedir( $dir ); 
} 
// llama a la funcion y pasa los parametros necesarios arriba explicados
// esta ruta devera ser la ruta relatica y no la absoluta 
crearthumb ("upload/","upload/thumbs/",100); 
?>

En la segunda parte crearemos la galería con una función llamada creargaleria que necesitará dos parámetros (la ruta relativa de las imágenes y sus thumbanils), la ejecución de esta función creará una página HTML que contendrá todos los thumbnails con los enlaces a sus imágenes originales.
<?php 
function creargaleria ( $pathToImages, $pathToThumbs ) 
{ 
echo "Creando galeria... 
"; 

$output = "<html>"; 
$output .= "<head><title>Previsualización</title></head>"; 
$output .= "<body>"; 
$output .= "<table cellspacing="0" cellpadding="2" width="500">"; 
$output .= "<tr>"; 

// abrir el directorio 
$dir = opendir( $pathToThumbs ); 

$counter = 0; 
// bucle dentro del directorio 
while (false !== ($fname = readdir($dir))) 
{ 
if ($fname != '.' && $fname != '..') 
{ 
$output .= "<td valign="middle" align="center"><a href="{$pathToImages}{$fname}">"; 
$output .= "<img src="{$pathToThumbs}{$fname}" border="0" />"; 
$output .= "</a></td>"; 

$counter += 1; 
if ( $counter % 4 == 0 ) { $output .= "</tr><tr>"; } 
} 
} 
// cerrar el directorio 
closedir( $dir ); 

$output .= "</tr>"; 
$output .= "</table>"; 
$output .= "</body>";
$output .= "</html>"; 

// abrir archivo 
$fhandle = fopen( "gallery.html", "w" ); 
// escribimos el contenido en la variable $outputal archivo fwrite( $fhandle, $output ); 
// cerrar archivo 
fclose( $fhandle ); 
} 
// llamamos a la funcion creargaleria y le pasamos los parametros necesarios 
creargaleria ("upload/","upload/thumbs/"); 
?>

La gran mayoría de errores con este tipo de scripts vienen por una mala configuración de nuestro servidor y más en concreto con la librería GD, es altamente recomendable revisar los permisos de los directorios en caso de error.

 

 

Agregar comentario