1. Code
  2. PHP
  3. PHP Scripts

Cómo crear una imagen en miniatura en PHP

Scroll to top

Spanish (Español) translation by Ana Paulina Figueroa (you can also view the original English article)

Hoy discutiremos cómo puedes crear imágenes en miniatura en PHP con la ayuda de la biblioteca GD.

Cuando trabajas en proyectos relacionados con los medios, la mayoría de las veces necesitarás crear miniaturas a partir de las imágenes originales. Además, si has habilitado la carga de imágenes en tu sitio web, es esencial que nunca muestres las imágenes originales cargadas por los usuarios. Esto se debe a que las imágenes cargadas por los usuarios pueden ser de gran tamaño y no estarán optimizadas para su visualización en la web. En lugar de eso, siempre debes cambiar el tamaño de las imágenes antes de mostrarlas en tu sitio web.

Existen diferentes herramientas que puedes usar para cambiar el tamaño de las imágenes en PHP, y vamos a hablar sobre una de las opciones más populares entre ellas: la biblioteca GD. Es una de las maneras más sencillas de crear miniaturas de imágenes sobre la marcha.

Requisitos previos

En esta sección analizaré los requisitos previos para el ejemplo que discutiremos más adelante en este artículo.

En primer lugar, debes asegurarte de que la biblioteca GD esté habilitada en tu instalación de PHP. En una instalación de PHP predeterminada, la biblioteca GD ya debería estar habilitada. Si no estás seguro de si esta biblioteca se encuentra ahí, revisemos rápidamente.

Crea el archivo info.php con el siguiente contenido.

1
    <?php phpinfo();
2
  

Carga este archivo a la raíz de documentos de tu sitio web. A continuación, abre el URL https://url-de-tu-sitio-web/info.php en tu navegador, y este debería mostrar la información de configuración de PHP, como aparece en la siguiente captura de pantalla.

PHP ConfigurationPHP ConfigurationPHP Configuration

Ahora intenta encontrar la sección de la extensión gd. Si está instalada y configurada en tu instalación de PHP, deberías poder encontrarla como se muestra en la siguiente captura de pantalla.

GD Library SectionGD Library SectionGD Library Section

Si no la encuentras, significa que gd no está instalada en tu servidor. En este caso, solo necesitas instalar la extensión gd y estarás listo para comenzar. Si quieres instalarla tú mismo, echa un vistazo a mi artículo que explica cómo instalar extensiones PHP específicas en tu servidor. Necesitarás tener acceso de superusuario al shell de tu servidor para poder instalarla tú mismo.

Una vez que hayas instalado y habilitado la extensión gd, es hora de ver el ejemplo real, y eso es de lo que hablaremos en la siguiente sección.

Un ejemplo real

En esta sección analizaremos un ejemplo real para demostrar cómo puedes crear miniaturas de imágenes en tus proyectos de PHP.

En primer lugar crearemos el archivo thumbimage.class.php, que contiene la clase ThumbImage y tiene la lógica para la creación de imágenes en miniatura. A continuación, crearemos el archivo example.php, que demuestra cómo usar la clase ThumbImage.

La clase ThumbImage

Continúa y crea el archivo thumbimage.class.php con el siguiente contenido.

1
    <?php // thumbimage.class.php class ThumbImage { private $source; public function __construct($sourceImagePath) { $this->source = $sourceImagePath; } public function createThumb($destImagePath, $thumbWidth=100) { $sourceImage = imagecreatefromjpeg($this->source); $orgWidth = imagesx($sourceImage); $orgHeight = imagesy($sourceImage); $thumbHeight = floor($orgHeight * ($thumbWidth / $orgWidth)); $destImage = imagecreatetruecolor($thumbWidth, $thumbHeight); imagecopyresampled($destImage, $sourceImage, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $orgWidth, $orgHeight); imagejpeg($destImage, $destImagePath); imagedestroy($sourceImage); imagedestroy($destImage); } }

2
  

Analicemos el método createThumb de forma detallada para comprender cómo funciona.

El método createThumb recibe dos argumentos: la ruta de la imagen de destino en donde se guardará la imagen en miniatura, y el ancho de la miniatura, que se utilizará para cambiar el tamaño. El parámetro del ancho de la miniatura es opcional y, si no envías ningún valor, tomará un valor de 100 como ancho predeterminado.

En primer lugar, hemos utilizado la función imagecreatefromjpeg, que crea el recurso de imagen en memoria a partir de la ruta de la imagen de origen que se inicializó en el constructor. Este recurso se utilizará más adelante, cuando creemos la imagen en miniatura. Es importante tener en cuenta que hemos usado la función imagecreatefromjpeg, ya que queremos cambiar el tamaño de la imagen jpeg de nuestro ejemplo. Si quieres cambiar el tamaño de imágenes png, gif o bmp, puedes usar las funciones imagecreatefrompngimagecreatefromgif o imagecreatefromwbmp, respectivamente.

A continuación, hemos usado las funciones imagesx e imagesy para medir el ancho y el alto de la imagen original. Estas dimensiones serán utilizadas cuando cambiemos el tamaño de la imagen original.

Una vez que tenemos el ancho y el alto de la imagen original, usamos esos valores para obtener el alto de la imagen en miniatura. Si sabes cómo calcular la relación de aspecto, esto debería resultarte familiar. Estamos usando la relación de aspecto para calcular el alto de la miniatura en función del ancho proporcionado para la misma, con el fin de asegurarnos de que la imagen resultante no se distorsione. Este es uno de los factores más importantes que debes considerar al crear imágenes en miniatura: una miniatura distorsionada causa confusión y se ve poco profesional.

A continuación hemos usado la función imagecopyresampled, que es la que hace el trabajo pesado de crear la imagen en miniatura. Esta copia y cambia el tamaño de parte de la imagen con un remuestreo basado en los parámetros proporcionados y genera la imagen en miniatura en la memoria.

1
    imagecopyresampled($destImage, $sourceImage, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $orgWidth, $orgHeight);
2
  

En la función imagecopyresampled, los dos argumentos iniciales son el recurso de imagen de destino y el recurso de imagen fuente. El tercer y el cuarto argumento son las coordenadas x e y del punto de destino. Los argumentos quinto y sexto son las coordenadas x e y del punto fuente. Los siguientes dos argumentos se usan para especificar el ancho y el alto de la imagen en miniatura que será creada. Y los dos últimos argumentos son el ancho y el alto de la imagen original.

Finalmente, la función imagejpeg es la que guarda la imagen en miniatura en memoria en la ruta deseada del disco. La variable $destImage contiene la fuente de la imagen en miniatura, y la hemos guardado en la ruta que se inicializa en la variable $destImagePath. Debes asegurarte de que tu servidor web pueda escribir en este directorio, de lo contrario la imagen en miniatura no se guardará en el disco.

Nuevamente, dado que queremos crear una imagen en miniatura de tipo jpeg, hemos utilizado la función imagejpeg. Si quieres crear imágenes gif, png o bmp, puedes usar las funciones imagepngimagegif o imagewbmp.

Por último, pero no por ello menos importante, es necesario liberar la memoria asociada con los recursos de imágenes. Hemos usado la función imagedestroy para lograr esto.

El archivo de ejemplo

Ahora veamos cómo puedes usar la clase ThumbImage para crear imágenes en miniatura. Continúa y crea el archivo example.php con el siguiente contenido.

1
    <?php // example.php require "thumbimage.class.php"; $objThumbImage = new ThumbImage("/web/uploads/orig.jpg"); $objThumbImage->createThumb("/web/uploads/thumb.jpg", 125);

2
  

Primero incluimos el archivo de clase necesario.

Luego creamos una instancia de la clase ThumbImage y la asignamos a la variable $objThumbImage. Es importante tener en cuenta que hemos enviado la ruta del archivo de imagen original como primer argumento al constructor cuando instanciamos la clase ThumbImage.

Finalmente, usamos el método createThumb para crear la imagen en miniatura. En el método createThumb, el primer argumento es la ruta de la imagen en miniatura, y el segundo argumento es el ancho de dicha imagen. Por supuesto, se utilizará el ancho predeterminado de 100 al cambiar el tamaño si no envías el segundo argumento.

Sigue adelante y ejecuta el archivo example.php, y este debería crear la imagen en miniatura.

Si hay algún problema y no es posible crear la imagen en miniatura, debes verificar que tengas los permisos correctos para el directorio en primer lugar. Eso debería solucionar el problema en la mayoría de los casos. Si el problema persiste, asegúrate de que la imagen de origen exista y de haber proporcionado la ruta correcta a la clase ThumbImage. Por supuesto, siempre puedes ponerte en contacto conmigo si te enfrentas a algún problema específico.

Conclusión

Así es como la biblioteca GD te permite crear miniaturas de imágenes en PHP. Como discutimos anteriormente, nunca debes mostrar imágenes originales en tu sitio web. En general, es recomendable crear diferentes versiones de imágenes, como pequeñas imágenes en miniatura para páginas de listado, imágenes en miniatura medianas para la página de introducción, y versiones grandes para la función de zoom.

En este artículo he demostrado cómo puedes usar la biblioteca GD para crear imágenes en miniatura en PHP. También creamos un ejemplo real para comprender las diferentes funciones proporcionadas por la biblioteca GD.

Aprende PHP con un curso gratuito en línea

Si quieres aprender PHP, ¡consulta nuestro curso gratuito en línea sobre los fundamentos de PHP!

En este curso, aprenderás los fundamentos de la programación en PHP. Comenzarás con los conceptos básicos, aprendiendo cómo funciona PHP y escribiendo bucles y funciones simples en él. Luego avanzarás a la codificación de clases para una programación orientada a objetos (POO) sencilla. En el camino, aprenderás las habilidades más importantes para escribir aplicaciones para la web: tendrás la oportunidad de practicar la respuesta a las solicitudes GET y POST, analizar JSON, autenticar usuarios y usar una base de datos MySQL.

  • GRATIS
    PHP
    Fundamentos de PHP
    Jeremy McPeak