Como hacer “thumbnails” de tus fotografias

PHP, junto con la librería GD, permiten la creación y manipulación de imágenes en tiempo real con gran facilidad y lograr unos resultados de una calidad más que aceptable.

Dependiendo de la versión de PHP y la librería GD, es posible crear y manipular imágenes de tipo JPEG, GIF, PNG y WBM, aunque en las últimas versiones no hay soporte para gráficos de tipo GIF. Para saber que formatos soporta tu instalación de PHP solo tienes que ejecutar el siguiente script:

< ?php
if (imagetypes() & IMG_PNG) echo 'Formato PNG soportado.&lt;br&gt;';
if (imagetypes() & IMG_JPG) echo 'Formato JPG soportado.&lt;br&gt;';
if (imagetypes() & IMG_GIF) echo 'Formato GIF soportado.&lt;br&gt;';
if (imagetypes() & IMG_WBMP) echo 'Formato WBMP soportado.&lt;br&gt;';
?>

Al ser el más complejo (o al menos completo) de realizar, haremos una función para redimensionar y ajustar la calidad de imágenes JPEG. Crear una función similar para imágenes PNG o WBMP debería resultaros sencillo.

La función recibe 5 parámetros:

  • Localización completa de la imagen original.
  • ocalización completa de la nueva imagen, es decir, el "thumbnail" que vamos a crear.
  • Calidad o compresión de la nueva imagen. Los valores posibles van de 0 (peor calidad, mayor compresión) a 95 (mejor calidad, menor compresión).
  • Anchura de la nueva imagen en pixels.
  • Altura de la nueva imagen en pixels.

A propósito de la calidad de las imágenes, debemos tener en cuenta que si la calidad de la imagen original era de por ejemplo el 75% y si especificamos que la calidad de la imagen redimensionada sea del 85%, la calidad de esta no mejorara, se mantendrá igual y solo conseguiremos incrementar el tamaño en bytes de la imagen. Por lo tanto, antes de aplicar esta función a una imagen debemos conocer su calidad actual.

Siguiendo con el mismo tema, los valores de calidad o compresión que se le puede aplicar a una imagen JPEG van del 0% al 95%. Lo lógico sería que fueran del 0% al 100%, pero por algún extraño motivo, la imagen resultante de una compresión del 97% es idéntica a la imagen comprimida al 95%.

A continuación puedes ver la función redimensionar_jpeg() y su aplicación:

&lt;?php
function redimensionar_jpeg($img_original, $img_nueva, $img_nueva_anchura, $img_nueva_altura, $img_nueva_calidad) {

// crear imagen desde original
$img = ImageCreateFromJPEG($img_original);

// crear imagen nueva
$thumb = ImageCreate($img_nueva_anchura,$img_nueva_altura);

// redimensionar imagen original copiandola en la imagen
ImageCopyResized($thumb,$img,0,0,0,0,$img_nueva_anchura,$img_nueva_altura,ImageSX($img),ImageSY($img));

// guardar la imagen redimensionada donde indicia $img_nueva
ImageJPEG($thumb,$img_nueva,$img_nueva_calidad);
}

redimensionar_jpeg('/home/yo/foto.jpg','/home/yo/mini_foto.jpg',100,100,75);
?&gt;

Ahora no tienes más que aplicar la función a cada una de las imágenes que desees redimensionar. También existe la posibilidad de ampliar la funcionalidad del script y hacer que este redimensione todas las imágenes de un directorio concreto. Por ejemplo, ejecutar el siguiente script en un directorio redimensionaría todas las imágenes de tipo JPEG del mismo:

&lt;?php
function redimensionar_jpeg($img_original,$img_nueva,$img_nueva_anchura,$img_nueva_altura,$img_nueva_calidad) {

// crear imagen desde original
$img = ImageCreateFromJPEG($img_original);

// crear imagen nueva
$thumb = ImageCreate($img_nueva_anchura,$img_nueva_altura);

// redimensionar imagen original copiandola en la imagen
ImageCopyResized($thumb,$img,0,0,0,0,$img_nueva_anchura,$img_nueva_altura,ImageSX($img),ImageSY($img));

// guardar la imagen redimensionada donde indicia $img_nueva
ImageJPEG($thumb,$img_nueva,$img_nueva_calidad);
}

$dir = opendir('.');

while(false !== ($file = readdir($dir))) {
if (!is_dir($file) && $file != '.' && $file != '..' && exif_imagetype($file)==2) {

// aplicar funcion
redimensionar_jpeg($file,'mini_'.$file,100,100,75).'&lt;br&gt;';
}
}
closedir($dir);
?&gt;

El trozo de código añadido al script simplemente recorre todos los archivos del directorio en busca de imágenes de tipo JPEG y cada vez que encuentra uno, le aplica la función redimensionar_jpeg().

4 Responses to “Como hacer “thumbnails” de tus fotografias”

  1. Luis Says:

    MMM tengo un problema con la funcion… al aplicarla a una imagen en color la obscurece
    excite algun paramtro para evitar esto ???

  2. miguel balboa Says:

    gracias. fue de mucha ayuda esta funcion..
    la modifique, de tal forma que no afecte las proporciones de la imagen.. aaa ..y tengo el mismo problema.. se oscurecen:

  3. ricardo Says:

    Ya se cual es el error de porque oscurecen las imagenes… es simple..

    Yo cambie 2 cosas…

    En vez de poner:
    // crear imagen nueva
    $thumb = ImageCreate($img_nueva_anchura,$img_nueva_altura);

    Yo puse:
    // crear imagen nueva
    $thumb = imagecreatetruecolor($img_nueva_anchura,$img_nueva_altura);

    En vez de:
    // redimensionar imagen original copiandola en la imagen
    ImageCopyResized($thumb,$img,0,0,0,0,$img_nueva_anchura,$img_nueva_altura,ImageSX($img),ImageSY($img));

    Puse:
    // redimensionar imagen original copiandola en la imagen
    imagecopyresampled ($thumb,$img,0,0,0,0,$img_nueva_anchura,$img_nueva_altura,imagesx($img),imagesy($img));

    Es todo Saludos!!

  4. liliana Says:

    hola esta funcion es muy buena y util gracias!!

    Solo que yo ocupo aparte hacer otra cosa para modificar el tamaño de la imagen y no se si puedan ayudarme, lo que pasa que las imagenes las pongo en un espacio que tiene la dimension 171×175. y pues las imagenes que tengo que son de diferente tamaño las voy a colocar, y pues yo ocupo redimensionar la imagen pero solo si tomando en cuenta el ancho, lo alto o ambas cosas que acepte cualquiera de esos tres rangos, me podrian decir si es posible hacer eso please

Leave a Reply