#Leer imágenes
#Leer fuentes de imágenes
public ImageManager::read(mixed $input, string|array|DecoderInterface $decoders = []): ImageInterface
Con un Image Manager configurado es posible leer imágenes desde diferentes fuentes. El método no solo acepta rutas del sistema de archivos, sino también datos de imagen binarios, datos de imagen codificados en Base64 o imágenes en formato Data Uri. También es posible pasar una variedad de objetos y recursos de PHP como entrada. A continuación se muestra una lista completa.
#Parámetros
| Nombre | Tipo | Descripción |
|---|---|---|
| input | mixed | Fuente de la imagen |
| decoders | string, array or DecoderInterface | Decodificador(es) para procesar los datos de entrada; por defecto el decodificador se detecta automáticamente |
#Fuentes de imagen compatibles
Se aceptan los siguientes formatos del argumento input.
- Ruta en el sistema de archivos
- Datos de imagen sin procesar (binarios)
- Datos de imagen codificados en Base64
- Data Uri
- Recurso de puntero de archivo
SplFileInfodel que derivanIlluminate\Http\UploadedFileySymfony\Component\HttpFoundation\File\UploadedFile- Instancia de Intervention Image (
Intervention\Image\Image) - Imagen Intervention codificada (
Intervention\Image\EncodedImage) - Imagen específica del driver (instancia de
GDImageoImagick)
Para decodificar los datos de entrada, opcionalmente puede especificar una estrategia de decodificación con el segundo parámetro. Esto puede ser un array de nombres de clase u objetos de decodificadores que se procesarán en secuencia. En este caso, la entrada debe poder ser decodificada por uno de los decodificadores pasados. También es posible pasar un único objeto o nombre de clase de un decodificador.
Todos los decodificadores que implementen DecoderInterface::class pueden pasarse. Normalmente se trata de una selección de clases del namespace Intervention\Image\Decoders.
Si se omite el segundo parámetro, el driver intentará decodificar usando todos los decodificadores disponibles. Si el argumento proporcionado no puede ser decodificado por la biblioteca, se lanzará una excepción de tipo Intervention\Image\Exceptions\DecoderException.
#Ejemplo
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
// Crear nueva instancia de ImageManager con el driver deseado
$manager = new ImageManager(new Driver());
// Leer imagen desde el sistema de archivos
$image = $manager->read('images/example.jpg');
// Leer imagen desde datos binarios
$image = $manager->read(file_get_contents('images/example.jpg'));
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\Decoders\DataUriImageDecoder;
use Intervention\Image\Decoders\Base64ImageDecoder;
use Intervention\Image\Decoders\FilePathImageDecoder;
// Crear nueva instancia de ImageManager con el driver deseado
$manager = new ImageManager(new Driver());
// Leer la imagen solo desde data URI o datos codificados en base64
$image = $manager->read($input, [
DataUriImageDecoder::class,
Base64ImageDecoder::class,
]);
// Leer la imagen solo desde una ruta de archivo
$image = $manager->read($input, FilePathImageDecoder::class);
// Lo mismo con un objeto en lugar del nombre de la clase
$image = $manager->read($input, new FilePathImageDecoder());
#Crear imágenes
#Crear nuevas imágenes
public ImageManager::create(int $width, int $height): ImageInterface
Leer fuentes de imagen existentes es una cosa, pero ¿y si desea crear sus propias imágenes? Intervention Image puede ayudarle con eso. Comience con una instancia de la clase Intervention\Image\ImageManager y llame al método create() con el tamaño de imagen deseado como argumentos. Vea el siguiente ejemplo:
Por defecto la imagen se crea con un fondo transparente. Si desea definir un color de fondo, utilice el método fill() después de la creación.
#Parámetros
| Nombre | Tipo | Descripción |
|---|---|---|
| width | integer | Ancho de la imagen |
| height | integer | Altura de la imagen |
#Ejemplo
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
// Crear nueva instancia de ImageManager con el driver deseado
$manager = new ImageManager(Driver::class);
// Crear nueva imagen 640x480
$image = $manager->create(640, 480);
// Crear nueva imagen 512x512 con fondo gris
$image = $manager->create(512, 512)->fill('ccc');
#Crear animaciones
public ImageManager::animate(callable $callback): ImageInterface
También es posible crear gráficos animados. Para ello, utilice la función "animate". A esta función se le pasa una función callback que determina la fuente y el tiempo de retardo de las imágenes individuales de la animación. Cabe señalar que la animación creada de esta manera se genera en un formato que soporta animaciones.
Las animaciones son posibles en todos los drivers proporcionados. Lea más sobre cómo modificar imágenes animadas.
#Parámetros
| Nombre | Tipo | Descripción |
|---|---|---|
| callback | callable | Configuración de la animación |
#Ejemplo
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
// Crear nueva instancia de ImageManager con el driver deseado
$manager = new ImageManager(new Driver());
// Crear una imagen animada con tres fotogramas y un retraso de 250 ms para cada fotograma
$image = $manager->animate(function ($animation) {
$animation->add('images/frame01.png', .25);
$animation->add('images/frame02.png', .25);
$animation->add('images/frame03.png', .25);
})->setLoops(4);
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
// Crear nueva instancia de ImageManager con el driver deseado
$manager = new ImageManager(Driver::Class);
// Crear una animación circular de 5 fotogramas en bucle creando
// sus propios fotogramas de animación mediante el método drawCircle
$animation = $manager->animate(function ($animation) use ($manager) {
for ($i = 1; $i <= 5; $i++) {
$animation->add(
$manager->create(300, 300) // tamaño del fotograma
->fill('b53717') // color de fondo del fotograma
->drawCircle(150, 150, function ($circle) use ($i) {
$circle->radius(40 * $i); // radio del círculo en píxeles
$circle->border('fff', 5); // color y tamaño del borde
}),
.15 // retraso del fotograma
);
}
})->setLoops(10);