Programando o Intentándolo

Como crear Thumbnails con PHP

En mi ultimo post hice un “tutorial” de como crear una galería de imágenes en PHP. Para mostrar la galería simplemente había aplicado CSS para establecer el tamaño de las imágenes y que así luciese como una galería pero obviamente si las imágenes fuesen muy pesadas o hubiese muchas la galería tardaría en cargarse.

Aquí explicare las sencillas funciones que he creado con PHP para crear thumbnails de las imágenes y aumentar así la velocidad de con la que se cargaría nuestra galería.

He optado por separar el código en 3 funciones para encapsular un poco los procesos y facilitar así futuras modificaciones, porque hay varias formas para crear thumbnails con PHP o con lo que sea dependiendo de si queremos recortar la imagen, escalarla, o cualquier convinación que se nos ocurra. Vamos con la función central que será la que creara los thumbnails.

El código esta comentado de arriba a abajo, por lo que hay poco más que comentar. Lo único decir que con esta sencilla función englobamos dos de las tres opciones que hay para crear thumbnails de las imágenes:

  • Crear la imagen con el ancho y alto elegidos. Tiene el problema de que la imagen probablemente quede distorsionada y su ventaja es que por ejemplo cara crear una galería nos permite que se vean todas las imágenes del mismo tamaño.

  • También es posible crear una imagen respetando las proporciones originales, si le pasamos por ejemplo solo el ancho que queremos y ponemos 0 en el alto.

La opción restante es:

  • Que la imagen resultante sea un trozo de la imagen original, es decir, cortar un trozo de la imagen. Que seria muy sencillo de hacer bastaría con pasar a la función imagecopyresampled() en lugar del tamaño de la imagen el tamaño del thumbnail y ya tendríamos un thumbnail que seria la esquina superior izquierda de la imagen original y jugando con las coordenadas de la imagen original podríamos obtener el trozo de la imagen original que nos pareciese.

    A mi esta opción no me gusta mucho pues si la imagen es un poco grande puede que el thumbnail no sea nada representativo. Por ejemplo este es el resultado con la imagen que se crearon los anteriores, thumbnails.

Además de estas opciones hay la opción por ejemplo de crear thumbnails con el ancho y el alto que queramos pero que mantenga las proporciones originales lo que puede ser sin duda interesante, y lo mejor es que es así de fácil de hacer:

El resultado seria este:

Bueno, la verdad puede ser un poco lioso de entender porque hay que manejar 3 tipos de ancho y alto, pero viendo el código es más sencillo.

Después de haber escrito este tema, se me vino otra opción a la cabeza en la que no había pensado y que puede que sea la mejor, asique aquí os la añado supercomentada porque esta es un poco más compleja:

Y el resultado seria este:

Finalmente,como se puede ver tanto en esta función modificada como en la original se llama a las funciones abrirImagen($nombreImagen) y guardarImagen($thumbnail, $nombreThumbnail, $tipo) que se encargan de abrir la imagen y de guardarla como su nombre indica.

En la función abrirImagen() comentar que se ha usado la función getimagesize() que puede resultar extraño porque no hace falta saber el tamaño para abrir la imagen pero es que esta función devuelve un array con información de la imagen y es por tanto el medio con el que contamos para poder saber el tipo de imagen mediante [‘mime’] y también decir que como resultado de la función abrirImagen() se devuelve un array con la imagen y con el tipo de esta para luego poder guardar la imagen con el mismo tipo aunque no seria necesario guardar las imágenes con el mismo tipo.

Y para terminar puedes descargarte el código aquí.