Cómo automatizar la edición gráfica a través de PHP con Intervention Image
La edición sencilla de imágenes a través de programación para, por ejemplo, crear miniaturas de forma automática, es posible gracias a librerías de PHP con funcionalidades específicas para ello, como Intervention Image, en la que nos centramos en este artículo. Como veremos, podremos realizar y automatizar modificaciones sobre los gráficos, como zooms, redimensionamientos, rotaciones, incrustaciones de marcas de agua o, incluso, aplicar diferentes efectos para, a continuación, guardarlos en un archivo optimizado. Esto es, sin duda, un recurso especialmente útil para desarrolladores.
Instalando Intervention Image
A partir de la versión 5.4 de PHP, estaremos en disposición de utilizar Intervention Image. No obstante, debemos tener en cuenta que necesita la extensión PHP Fileinfo (una de las más habituales) y alguna de estas dos librerías GD Library (2.0 o superior) o Imagick PHP (6.5.7 o más)
Vía Composer y con el siguiente comando, incorporaremos Intervention Image en nuestro proyecto web:
php composer.phar require intervention/image
Ya instalado, usaremos autoload para que podamos utilizar la librería en nuestro código.
require 'vendor/autoload.php';
Un ejemplo sencillo con Intervention Image
Este es un sencillo ejemplo en el que crearemos una miniatura o thumbnail a partir de un archivo y cuya salida será otro diferente.
// Autoload de composer require 'vendor/autoload.php'; // Se declara la librería use Intervention\Image\ImageManager; // A través de la clase ImageManager creamos una instancia // Usando la extensión de PHP Imagick $intervention = new ImageManager(array('driver' => 'imagick')); // Creamos la imagen desde un archivo existente $image = $intervention->make('images/img1.jpg'); // Redimensionamos la imagen $image->resize(500, 400); // La guardamos con otro nombre $image->save('images/img-thumbnail1.jpg', 60);
Todo esto lo podríamos reducir en una sola línea de código:
$intervention->make('images/img1.jpg')->resize(500, 400)->save('images/img-thumbnail.jpg', 60);
Hemos redimensionado la imagen y le hemos dado un nombre de fichero. Con este método podríamos concatenar varias llamadas y aplicar multitud de acciones de una manera rápida y sencilla.
El método resize() lo utilizamos para dar una nueva dimensión a la imagen (alto y ancho), pero podemos cometer el error de no hacerlo de manera proporcional y deformar el gráfico, algo que no sería problema si utilizamos un par de métodos que hagan por nosotros ese trabajo de cálculo de manera automática:
$imagen = $intervention->make('images/img1.jpg'); $imagen->widen(550)->save('images/img-thumbnail550.jpg', 60);
Con el código anterior, crearemos una imagen de 550 pixeles de ancho, pero con una altura proporcional a la original. El método que se ha utilizado ha sido widen() (ancho), pero si aplicamos heighten() (alto), le otorgaremos al gráfico una altura fija y un ancho proporcional. En próximos artículos, hablaremos también de fit() cuya finalidad es dejar unas dimensiones fijas pero realizando un recorte de lienzo.
Usando la librería GD o Imagick
Como hemos comentado anteriormente, Intervention Image puede funcionar con un par de librerías gráficas (GD Library o Imagick PHP), aunque Imagick suele ser la más recomendada. Veamos algunas razones:
- Mayor rendimiento.
- Ficheros de superior tamaño.
- Las limitaciones en GD Library pueden hacer que algunas funciones no se puedan aplicar en Intervention Image.
Si quieres utilizar la librería GD, tan solo tienes que instanciar ImageManager señalando que el driver es gd.
$intervention = new ImageManager(array('driver' => 'gd'));
Recuerda que si lo que queremos es tratar imágenes pesadas, deberíamos de utilizar la librería Imagick.
$intervention = new ImageManager(array('driver' => 'imagick'));
Realmente es lo único que tenemos que tener en cuenta, pues la API de Intervention Image es la misma para ambas librerías.