22 junio, 2023
Para convertir un GIF animado a formato WEBP animado reduciendo el tamaño de los frames del GIF usaremos la extensión Imagick de PHP en LARAVEL
Suscríbete a nuestro canal en Youtube
SuscríbirsePara convertir un GIF animado a formato WEBP animado, reduciendo el tamaño de los frames del GIF utilizando la extensión Imagick de PHP en Laravel, puedes seguir el siguiente ejemplo:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Imagick;
class ConvertController extends Controller
{
public function convertGifToWebp(Request $request)
{
$gifPath = $request->file('gif')->getRealPath();
$webpPath = 'ruta/al/archivo.webp'; // Ruta de salida para el archivo WEBP
// Crear una instancia de Imagick y establecer el formato de salida como WEBP
$image = new Imagick($gifPath);
$image->setImageFormat('webp');
$image->setOption('loop', 0); // 0 para bucle infinito, 1 para no bucle
// Reducir el tamaño de los frames del GIF
$optimizedImage = $this->resizeFrames($image);
// Configurar opciones de compresión para reducir el tamaño del archivo
$optimizedImage->setOption('lossless', 'true'); // Calidad sin pérdidas
$optimizedImage->setImageCompression(Imagick::COMPRESSION_LOSSLESSJPEG);
$optimizedImage->setImageCompressionQuality(75); // Ajusta el nivel de calidad según tus necesidades
// Guardar el archivo WEBP animado
$optimizedImage->writeImages($webpPath, true);
$optimizedImage->destroy();
return response()->download($webpPath)->deleteFileAfterSend(true);
}
private function resizeFrames(Imagick $image)
{
// Obtener el número total de frames del GIF
$frameCount = $image->getNumberImages();
// Obtener el ancho y alto deseados para los frames
$newWidth = 500; // Nuevo ancho deseado
$newHeight = 300; // Nuevo alto deseado
// Redimensionar cada frame del GIF al nuevo tamaño deseado
for ($i = 0; $i < $frameCount; $i++) {
// Obtener el frame actual
$image->setIteratorIndex($i);
// Redimensionar el frame al nuevo tamaño
$image->scaleImage($newWidth, $newHeight);
}
return $image;
}
}
En este ejemplo, hemos creado un método adicional llamado resizeFrames()
que se encarga de reducir el tamaño de cada frame del GIF al nuevo tamaño deseado. Dentro de este método, se obtiene el número total de frames del GIF y se redimensiona cada frame al nuevo ancho y alto utilizando el método scaleImage()
.
Recuerda reemplazar 'ruta/al/archivo.webp'
con la ruta deseada para el archivo de salida en formato WEBP.
El resto del código es similar a los ejemplos anteriores, donde se carga el archivo GIF, se establece el formato de salida como WEBP, se configuran las opciones de compresión y se guarda el archivo WEBP animado.
Leido 1002 veces | 1 usuarios
1 descargas
Para descargar el código crea una cuenta
Crear cuenta© Copyright Codea::App Cursos de Programación Online | LATAM | 2020 - 2024