Inicio » Blog » Laravel

22 junio, 2023

Convertir un GIF animado a formato WEBP animado usando PHP Imagick

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íbirse

Para 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 781 veces

Descarga el código fuente Laravel

Recurso descargado 0 veces

USD

Descargar Código Fuente

Compartir link del tutorial con tus amigos


Aprende más sobre Laravel

Cursos de programación

Codea Codea App

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú

© Todos los derechos reservados Codea App | ...de frente al código!!! | 2020 - 2023