Ambos controladores incluidos con Intervention Image admiten animación por defecto. Sin embargo, el controlador GD requiere recursos adicionales ya que no soporta la animación de forma nativa.
Si está cargando imágenes sin la intención de procesar la animación en absoluto, este proceso puede desactivarse previamente en la configuración del Gestor de Imágenes para ahorrar recursos.
#Crear animaciones
#Crear una animación a partir de diferentes fuentes
Más información sobre el proceso de creación de animaciones se puede encontrar en el capítulo sobre instanciación.
#Detectar animaciones
#Comprobar si la instancia de imagen actual está animada
public Image::isAnimated(): bool
Devuelve true si la imagen está animada. De lo contrario, false.
#Ejemplo
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
// crear una nueva instancia de ImageManager con el driver deseado
$manager = new ImageManager(Driver::class);
// verdadero
$result = $manager->read('images/animation.gif')->isAnimated();
#Editar animaciones
#Leer el número de fotogramas de la animación
public Image::count(): int
Lee el número de fotogramas de la animación. ImageInterface::class extiende Countable::class, por lo que también es posible usar el objeto de imagen con la función count().
#Ejemplo
use Intervention\Image\ImageManager;
// crear una nueva instancia de ImageManager con el driver deseado
$manager = ImageManager::gd();
// leer un gif animado
$image = $manager->read('images/animation.gif');
// obtener el número de fotogramas de la animación
$count = $image->count();
// mismo resultado con la función count()
$count = count($image);
#Modificar los fotogramas de la animación
public Image::sliceAnimation(int $offset, null|int $length = null): ImageInterface
Extrae fotogramas de la animación según los valores indicados y descarta el resto. El parámetro offset puede usarse para establecer el punto de inicio de la nueva animación; todos los fotogramas anteriores al offset se descartarán. El parámetro length es opcional. Especifica cuántos fotogramas leer después del offset. Por defecto se leen todos los fotogramas hasta el final de la animación.
#Parámetros
| Nombre | Tipo | Descripción |
|---|---|---|
| offset | integer | Punto de inicio de la nueva animación |
| length | null o integer | Fotogramas a leer después del offset (opcional) |
#Ejemplo
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
// crear una nueva instancia de ImageManager con el driver deseado
$manager = new ImageManager(new Driver());
// leer un gif animado
$image = $manager->read('images/animation.gif');
// descartar los primeros 20 fotogramas y leer los 10 siguientes como nueva animación
$image = $image->sliceAnimation(20, 10);
#Leer el número de iteraciones de la animación
public Image::loops(): int
Lee el número de iteraciones de la imagen animada. 0 significa que la imagen se reproduce en bucle de forma continua.
#Ejemplo
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
// crear una nueva instancia de ImageManager con el driver deseado
$manager = new ImageManager(new Driver());
// leer un gif animado
$image = $manager->read('images/animation.gif');
// obtener el número de iteraciones de la animación
$count = $image->loops();
#Cambiar el número de iteraciones de la animación
public Image::setLoops(int $count): ImageInterface
Cambie el número de iteraciones por las que debe repetirse la animación. Establezca 0 para que se reproduzca en bucle de forma continua.
#Parámetros
| Nombre | Tipo | Descripción |
|---|---|---|
| count | integer | Número de iteraciones de la animación |
#Ejemplo
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
// crear una nueva instancia de ImageManager con el driver deseado
$manager = new ImageManager(new Driver());
// leer un gif animado
$image = $manager->read('images/animation.gif');
// la animación debe ejecutarse solo una vez
$image = $image->setLoops(1);
#Eliminar la animación
public Image::removeAnimation(int|string $position = 0): ImageInterface
Convierte una imagen animada en una no animada descartando todos los fotogramas de la animación de la instancia de imagen actual, excepto el que se encuentra en la posición indicada.
La posición puede especificarse como un valor entero o como una cadena. Con un entero, se usa el número exacto de fotograma empezando en 0 como el fotograma restante. Los valores de cadena deben ser un valor porcentual entre 0% y 100% y el número de fotograma que queda se determina sólo de forma aproximada.
Si la posición se especifica como entero, el método lanza una excepción si el fotograma no existe. Esto no ocurre con valores porcentuales, ya que siempre se puede encontrar un fotograma.
#Parámetros
| Nombre | Tipo | Descripción |
|---|---|---|
| position | integer o string | Posición del fotograma que quedará. |
#Ejemplo
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
// crear una nueva instancia de ImageManager con el driver deseado
$manager = new ImageManager(new Driver());
// leer un gif animado
$image = $manager->read('images/animation.gif');
// convertir la animación en una imagen estática mostrando el fotograma en la posición 5
$image = $image->removeAnimation(5);
// hacer lo mismo eligiendo el fotograma en el 25% de la animación
$image = $image->removeAnimation('25%');