Inicio » Blog »

22 junio, 2023

Convertir un GIF animado a formato WEBP animado usando PHP Imagick

#Laravel #PHP

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

Convertir un GIF animado a formato WEBP animado usando PHP Imagick

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 1632 veces | 2 usuarios

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

Accede al código fuente esencial de nuestra aplicación en formato ZIP ó TXT. Ideal para desarrolladores que desean personalizar o integrar nuestra solución.

Opciones de descarga

  • Usuarios Registrados: Inicia sesión para descarga inmediata.
  • Nuevos Usuarios: Regístrate y descarga.

2 descargas

Para descargar el código inicia sesión o crea una cuenta

Iniciar Sesión

Compartir link del tutorial con tus amigos


Curso de Laravel básico

USD 0.00

Descarga del código fuente

Curso de Laravel básico

Codea Applications

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