#Formatos de imagen
Los formatos de imagen admitidos dependen del driver utilizado. Mientras que con Imagick y libvips es posible leer todos los formatos que la propia biblioteca soporta y escribir los formatos indicados más abajo, con GD solo son legibles y escribibles los formatos listados a continuación.
Lea más sobre codificación de diferentes formatos de imagen en la sección de salida.
| Formato | GD | Imagick | libvips |
|---|---|---|---|
| JPEG | ✅ | ✅ | ✅ |
| GIF | ✅ | ✅ | ✅ |
| GIF animado | ✅ | ✅ | ✅ |
| PNG | ✅ | ✅ | ✅ |
| AVIF | ✅ | ✅ | ✅ |
| Mapa de bits | ✅ | ✅ | ✅ |
| WebP | ✅ | ✅ | ✅ |
| WebP animado | ❌ | ✅ | ✅ |
| TIFF | ❌ | ✅ | ✅ |
| JPEG 2000 | ❌ | ✅ | ✅ |
| HEIC | ❌ | ✅ | ✅ |
Tenga en cuenta que no todos los formatos de imagen están siempre incluidos en las extensiones de imagen de PHP. Por lo tanto, es posible que la biblioteca GD esté instalada pero se haya compilado sin soporte para JPEG, o que Imagick esté disponible sin soporte para WebP, por ejemplo.
Todos estos formatos de imagen pueden leerse desde diversas fuentes. Estas son en detalle:
- Ruta en el sistema de archivos
- Datos binarios sin procesar de la imagen
- Datos de imagen codificados en Base64
- Esquema Data URI
- Recurso de puntero de archivo
SplFileInfodel que derivanIlluminate\Http\UploadedFileySymfony\Component\HttpFoundation\File\UploadedFile- Instancia de Intervention Image (
Intervention\Image\Image) - Intervention Image codificada (
Intervention\Image\EncodedImage) - Imagen específica del driver (instancia de
GDImageoImagick)
#Comprobar el soporte de formatos de imagen
public DriverInterface::supports(string|Format|FileExtension|MediaType $identifier): bool
Este método puede usarse en tiempo de ejecución para averiguar si un formato específico está soportado. Comprueba si el formato deseado está soportado por el driver actual y si la extensión subyacente se ha compilado con el soporte necesario, devolviendo true si se cumplen ambas condiciones.
#Parámetros
| Nombre | Tipo | Descripción |
|---|---|---|
| identifier | string, Format, FileExtension or MediaType | Identificador del formato de imagen, que puede pasarse ya sea como una string de extensión de archivo, una string de tipo de medio o como miembro del enum. |
#Ejemplo
use Intervention\Image\Drivers\Imagick\Driver as ImagickDriver
use Intervention\Image\Format;
use Intervention\Image\MediaType;
use Intervention\Image\FileExtension;
$manager = ImageManager::withDriver(ImagickDriver::class);
// check by file extension if driver supports jpeg format
$result = $manager->driver()->supports('jpg');
// check by media type if driver supports jpeg format
$result = $manager->driver()->supports('image/jpeg');
// check by enum member if driver supports jpeg format
$result = $manager->driver()->supports(Format::JPEG);
// check by enum member if driver supports jpeg format
$result = $manager->driver()->supports(MediaType::IMAGE_JPEG);
// check by enum member if driver supports jpeg format
$result = $manager->driver()->supports(FileExtension::JPG);
#Formatos de color
La biblioteca admite varios formatos para definir colores en sus métodos.
Los valores de entrada para los colores pueden diferir del espacio de color real de la imagen. Por lo tanto, es posible dibujar sobre una imagen CMYK utilizando una especificación de color HSV. Los colores se convertirán automáticamente al espacio de color de destino.
#Formato de cadena
#Formato de cadena hexadecimal
Puede pasar colores como tripletas hex RGB, que se usan comúnmente en HTML y CSS. Es posible usar la forma abreviada así como la completa, con o sin canal alfa. El # inicial es opcional.
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
// crear nueva imagen con fondo rojo
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('b53717');
// crear nueva imagen con fondo rojo semi-transparente
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('b5371766');
#Formato de cadena RGB
También se admiten valores de cadena RGB en notación funcional. Para incluir un valor alfa, use el prefijo RGBA, como se muestra en el siguiente ejemplo.
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
// crear nueva imagen con fondo semi-transparente
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('rgba(15, 20, 255, .5)');
// crear nueva imagen con fondo rojo
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('rgb(255, 0, 0)');
#Formato de cadena CMYK
También se admiten valores de cadena CMYK en notación funcional.
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
// crear nueva imagen con fondo
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('cmyk(100, 100, 55, 60)');
#Formato de cadena HSV/HSB
También es posible pasar valores de color en la alternativa RGB, HSV/HSB.
use Intervention\Image\ImageManager;
// crear nueva imagen con fondo semi-transparente
$image = ImageManager::imagick()->read('example.jpg');
// dibujar píxel coloreado
$image->drawPixel(120, 200, 'hsv(230, 15, 75)');
#Formato de cadena HSL
También es posible pasar valores de color en el formato HSL.
use Intervention\Image\ImageManager;
// crear nueva imagen con fondo semi-transparente
$image = ImageManager::imagick()->read('example.jpg');
// rellenar imagen con color
$image->fill(120, 200, 'hsl(100, 15, 10)');
#Nombres de color HTML
Intervention Image puede leer colores de los 140 nombres de color HTML extendidos de la especificación W3C.
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
// crear nueva imagen con fondo semi-transparente
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('steelblue');
#Transparencia
Si es necesario especificar transparencia como color, esto siempre se puede hacer con la palabra clave transparent.
use Intervention\Image\ImageManager;
$manager = ImageManager::gd();
$image = $manager->read('images/example.png');
$image->pad(300, 200, 'transparent');
#Objetos de color
Los colores también pueden definirse en forma de objeto. Actualmente existe una clase de color separada para cada espacio de color.
#Objeto de color RGB
El objeto de color RGB utiliza tres parámetros para los canales básicos así como un parámetro alfa opcional, que por defecto se define como completamente opaco.
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
use Intervention\Image\Colors\Rgb\Color;
// crear nueva imagen con fondo semi-transparente
$image = (new ImageManager(Driver::class))->create(300, 200)->fill(new Color(45, 0, 10, .5));
// crear nueva imagen con fondo rojo
$image = (new ImageManager(Driver::class))->create(300, 200)->fill(new Color(255, 0, 0));
#Objeto de color CMYK
El objeto de color CMYK se construye usando cuatro parámetros que corresponden a los cuatro canales del espacio de color.
use Intervention\Image\ImageManager;
use Intervention\Image\Colors\Cmyk\Color;
// crear nueva imagen con fondo semi-transparente
$image = ImageManager::imagick()->create(300, 200)->fill(new Color(100, 100, 55, 60));
#Objeto de color HSV/HSB
El constructor del objeto de color HSV/HSB toma tres parámetros para Hue, Saturation y Value/Brightness.
use Intervention\Image\ImageManager;
use Intervention\Image\Colors\Hsv\Color;
// crear nueva imagen con fondo semi-transparente
$image = ImageManager::imagick()->create(300, 200)->fill(new Color(230, 15, 75));
#Objeto de color HSL
El constructor del objeto de color HSL toma tres parámetros para Hue, Saturation y Luminance.
use Intervention\Image\ImageManager;
use Intervention\Image\Colors\Hsl\Color;
// crear nueva imagen con fondo semi-transparente
$image = ImageManager::imagick()->create(300, 200)->fill(new Color(230, 15, 75));
#Espacios de color
Los espacios de color disponibles están determinados principalmente por el driver utilizado. El driver Imagick soporta tanto los espacios de color RGB como CMYK, mientras que el driver GD solo soporta RGB. El espacio de color por defecto para las imágenes recién creadas es RGB.
Usar el driver GD en Intervention Image para leer imágenes CMYK las convertirá automáticamente al espacio de color RGB, lo que puede resultar en desviaciones de color.
Dado que el driver GD no soporta CMYK, no se recomienda su uso con imágenes CMYK.
Lea cómo leer y modificar el espacio de color en la sección sobre Información meta.
#Convertir colores a otros espacios de color o formatos
Los colores siempre pueden convertirse a los espacios de color soportados. Esto es posible incluso si el driver no soporta el espacio de color deseado.
Los objetos de color también pueden convertirse a los siguientes formatos.
Intervention\Image\Colors\Rgb\ColorspaceIntervention\Image\Colors\Cmyk\ColorspaceIntervention\Image\Colors\Hsv\ColorspaceIntervention\Image\Colors\Hsl\Colorspace
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\Colors\Hsv\Colorspace as HsvColorspace;
// read RGB image from filesystem
$manager = new ImageManager(new Driver());
$image = $manager->read('example.jpg');
// obtener color del píxel en la posición indicada
$color = $image->pickColor(100, 100);
// convertir color al formato HSV
$color = (string) $color->convertTo(HsvColorspace::class); // 'hsv(220, 10, 65)'