Skip to main content

Introducción

Laravel ofrece una API fluida de procesamiento de imágenes a través de la fachada Image. Puedes describir operaciones como redimensionar, recortar, codificar o guardar con una notación coherente en todo el framework. Internamente utiliza Intervention Image, que soporta tanto la extensión GD como la extensión Imagick de PHP.
El procesamiento de imágenes puede consumir mucha CPU y memoria. No proceses imágenes grandes dentro de una petición HTTP; considera hacerlo mediante un job de cola.
Esta funcionalidad está disponible desde Laravel v13.20.0. Si utilizas una versión anterior, actualiza el framework a la última con composer update.

Instalación

Antes de usar el procesamiento de imágenes, instala el paquete Intervention Image con Composer.
Además, verifica que tienes instalada la extensión GD o Imagick de PHP según el driver que vayas a utilizar.

Configuración

El archivo de configuración se ubica en config/image.php. Si no existe, publícalo con el comando Artisan.
El driver por defecto se puede indicar en el archivo de configuración o con la variable de entorno IMAGE_DRIVER. Los drivers soportados son gd e imagick.

Cargar imágenes

La fachada Image ofrece métodos para crear una instancia de imagen desde diversas fuentes. El contenido de la imagen se carga de forma perezosa, así que no se lee realmente hasta que se solicita el procesamiento o los bytes.

Archivo subido

Para obtener una imagen enviada desde una petición, usa el método image. Si el archivo no existe, devuelve null.
Para crearla a partir de una instancia de UploadedFile, usa fromUpload.
Para instancias creadas desde una subida, el método file te permite recuperar el archivo original.

Archivo del storage

Para crear una instancia a partir de un archivo guardado en un disco del sistema de archivos, usa fromStorage. El primer argumento es la ruta y el segundo, el nombre del disco.
También puedes crearla desde el método image de la fachada Storage.

Otras fuentes

También puedes crear una instancia a partir de bytes, una ruta local, una URL o Base64.

Procesar la imagen

Las instancias de imagen son inmutables. Cada método devuelve una nueva instancia con la transformación añadida al pipeline de procesamiento, así que puedes encadenarlas. Las transformaciones se aplican en el orden en que se añaden al pipeline y la codificación se realiza una sola vez al final.

Redimensionado

Otras transformaciones

Transformaciones condicionales

Las instancias de imagen soportan el trait Conditionable, que permite transformaciones condicionales con when / unless.

Codificación

Por defecto se codifica en el formato original. Para cambiar de formato:
Con el método quality puedes fijar la calidad de salida (1–100).
optimize es un atajo para el cambio de formato y el ajuste de calidad. Por defecto usa WebP con calidad 70.
También puedes obtener los bytes, Base64 o data URI.

Guardar

Con el método store guardas la imagen en un disco del sistema de archivos. Laravel genera automáticamente un nombre único y devuelve la ruta de guardado.
Para especificar el nombre de archivo, usa storeAs.
Para guardar con visibilidad public, usa storePublicly / storePubliclyAs.
Si falla el guardado, se devuelve false.

Obtener información de la imagen

Con los métodos mimeType, extension, dimensions, width y height puedes consultar la información de la imagen. Estos métodos operan sobre la imagen ya procesada (por ejemplo, tras cover(400, 400), llamar a width() devuelve 400).

Drivers personalizados

El gestor de imágenes de Laravel extiende Illuminate\Support\Manager, así que puedes registrar drivers personalizados con el método extend. Un driver personalizado implementa la interfaz Illuminate\Contracts\Image\Driver, y en el método process recibe los bytes originales y el pipeline y devuelve los bytes procesados.
Regístralo en el método boot de un service provider.
Para especificar el driver para una imagen concreta, usa using.

Transformaciones personalizadas

Puedes definir transformaciones personalizadas con una clase que implemente la interfaz Illuminate\Contracts\Image\Transformation.
Registra el handler en el método boot de un service provider.
Una vez registrado, aplícalo con transform.
Última modificación el 2 de agosto de 2026