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 1002 veces | 1 usuarios

Descarga del código fuente Laravel de Convertir un GIF animado a formato WEBP animado usando PHP Imagick

1 descargas

Para descargar el código crea una cuenta

Crear cuenta

Compartir link del tutorial con tus amigos


Curso de Laravel básico

USD 17.00

Descarga del código fuente

Curso de Laravel básico

Más tutoriales de Laravel

Codea Applications

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

© Copyright Codea::App Cursos de Programación Online | LATAM | 2020 - 2024