A veces necesitamos crear vistas pequeñas de las imágenes que queremos utilizar a lo largo de nuestra aplicaciones webs y/o blogs.
Personamente tuve la necesidad de crear miniaturas para evitar poner las imágenes en su tamaño real o en todo caso ponerlas completamente y redimensionarla a traves del tag <img> que sería lo mismo, ya que tendriamos que descargar todo el archivo de la imagen para luego redimensionarla.
Debo aclarar también que al hacer el remidensionamiento con el tag img deformamos la imágen por lo que es muy tedioso saber cuánto tenemos que redimensionar para que la imagen sea exactamente como lo hemos pensado.
Lo primero que debemos hacer es fijarnos si tenemos instalado la librería gd para poder realizar las miniaturas (thumbnails) que deseamos hacer.
Vamos a nuestro navegador de preferencia y vemos la información del phpinfo de nuestro servidor.

(click en la imagen para agrandar)
Si no tenemos instalado la librería, sería mejor lidiar con la instalación de la librería antes de seguir con los pasos posteriores. He aquí donde puedes encontrarla y puedes instalarla de manera sencilla.
Asumiendo que la librería fue instalada satisfactoriamente en nuestro servidor, revisamos otra vez la información del phpinfo y nos fijamos si aparece la librería.
Hecho esto, proseguimos a la construcción en si y creamos un formulario en html conteniendo el archivo de la imagen, el nombre que quisieramos darle a la imagen y el ancho preferido para la miniatura (el alto se redimensiona a través de una fórmula para que no se degenere la imagen)
Tendríamos un formulario mas o menos como el siguiente:
(utilicé tablas para no liar con css temporalmente, sé que ya está despreciado pero es un código pequeñito)
<form method="POST" enctype="multipart/form-data"> <table width="300" align="center"> <caption>Formulario de creación de miniaturas</caption> <tr> <td>Archivo:</td><td> <input type="file" name="imagen"></td> </tr> <tr> <td>Nombre:</td><td><input type="text" name="nombre"></td> </tr> <tr> <td>Ancho:</td><td><input type="text" name="ancho"></td> </tr> <tr> <td></td><td><input type="submit" value="Crear Thumbnail"></td> </tr> </table> </form>
Con lo que obtendríamos el siguiente aspecto
Creamos la función que hará todo el trabajo de crear la miniatura, esta función recibe cuatro parámetros, los cuáles son: el nombre del archivo original (previamente subido al servidor), la extensión de la imagen original, el nombre de la miniatura (temporal) y el ancho o tamaño a la que queremos redimensionar.
function createThumbnail($file,$ext,$thumbName,$size)
{
//seleccionamos el tipo de extension al que haremos referencia
switch($ext)
{
case 'jpg':
$original = imagecreatefromjpeg($file);
break;
case 'gif':
$original=imagecreatefromgif($file);
break;
case 'png':
$original=imagecreatefrompng($file);
break;
}
//adquirimos el ancho y el alto de la imagen original
$ancho = imagesx($original);
$alto = imagesy($original);
//si aplicamos la siguiente formula redimensionaremos la imagen sin deformarla
//nuevoAncho=anchoOriginal/parametroNuevoAncho
//nuevoAlto =altoOriginal/nuevoAncho
$nAncho=$ancho/$size;
$nAlto=$alto/$nAncho;
$thumb = imagecreatetruecolor($size,$nAlto);
//redimensionamos la imagen original en la variable del thumbnail
imagecopyresampled($thumb,$original,0,0,0,0,$size,$nAlto,$ancho,$alto);
//elegimos nuevamente la extension para crear la imagen
switch($ext)
{
case 'jpg':
imagejpeg($thumb,$thumbName,90);
break;
case 'gif':
imagegif($thumb,$thumbName,90);
break;
case 'png':
imagepng($thumb,$thumbName,90);
break;
}
}
Posteriormente construimos la parte en la que recibimos los datos, los procesamos y creamos la miniatura
<?php</pre>
<span style="border-collapse: collapse; color: #474747; font-family: Arial; font-size: 12px; text-align: left;">$imagen=$_FILES['imagen']['name'];
$nombre=$_POST['nombre'];
$archivo=explode('/',$imagen);
$archivo=strtolower($archivo[count($archivo)-1]);
$ancho=(int)$_POST['ancho'];
$extension=explode('.',$archivo);
$extension=strtolower($extension[count($extension)-1]);
//verificamos si tiene las extensiones permitidas
if($extension!='jpg' && $extension!='gif' && $extension!='png')
{?>
<script language="javascript">
alert('Error: Los tipos de archivos soportados son jpg, gif o png');
location.replace('thumbnail.php');
</script>
<?php
}
//verificamos si el valor ingresado en el ancho es un numero
if(!is_integer($ancho))
{?>
<script language="javascript">
alert('Error: El ancho especificado debe tener valor numerico');
location.replace('thumbnail.php');
</script>
<?php
}
//especificamos la ruta a seguir
$ruta=$nombre.'.'.$extension;
//guardamos la imagen en el servidor para poder hacer el thumbnail
if(!move_uploaded_file($_FILES['imagen']['tmp_name'],$ruta))
{?>
<script language="javascript">
alert('Error: El archivo no fue subido correctamente');
location.replace('thumbnail.php');
</script>
<?php
}
//ponemos un nombre temporal para el thumbnail
$nuevoNombre='temp_'.$nombre.'.'.$extension;
//creamos el thumbnail
createThumbnail($ruta,$extension,$nuevoNombre,$ancho);
//eliminamos el archivo original
unlink($ruta);
//renombramos el archivo temporal al nombre del archivo seleccionado
rename($nuevoNombre,$ruta);?>
<p>Archivo: <?php echo $nombre.'.'.$extension?> creado satisfactoriamente</p>
<p><img src="<?php echo $ruta?>"></p>
<?php
unset($imagen);?>
Una vez realizado esto ya tenemos nuestro módulo para crear miniaturas con PHP y la librería GD.
No fue tan difícil realizarlo y nos puede ser muy útil para crear las miniaturas que queremos (las miniaturas que ven en este articulo fueron creadas con este módulo)
Espero que les haya servido para darle cualquier uso o escalarlo y mejorarlo para plantear soluciones nuevas.










