optimitzar imatges en laravel
optimitzar imatges en laravel
Paso 1: Instalar el Paquete spatie/laravel-image-optimizer
Primero, instala el paquete necesario usando Composer:
composer require spatie/laravel-image-optimizer
Paso 2: Crear un Comando Artisan para Optimizar las Imágenes
Vamos a crear un nuevo comando Artisan para optimizar todas las imágenes en los directorios mencionados.
- En la terminal, ejecuta el siguiente comando para crear el comando:
php artisan make:command OptimizeImages
- Esto generará un archivo en app/Console/Commands/OptimizeImages.php.
Paso 3: Editar el Archivo OptimizeImages.php
Abre el archivo app/Console/Commands/OptimizeImages.php y reemplaza su contenido con el siguiente código:
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Storage; use Spatie\ImageOptimizer\OptimizerChainFactory; class OptimizeImages extends Command { protected $signature = 'images:optimize'; protected $description = 'Optimiza todas las imágenes en public/img y storage/app/public, incluyendo subdirectorios'; public function __construct() { parent::__construct(); } public function handle() { $optimizerChain = OptimizerChainFactory::create(); // Optimizar imágenes en public/img y sus subdirectorios $publicImages = Storage::allFiles('public/img'); foreach ($publicImages as $image) { $this->optimizeImage($image, $optimizerChain); } // Optimizar imágenes en storage/app/public y sus subdirectorios $storageImages = Storage::allFiles('public'); foreach ($storageImages as $image) { $this->optimizeImage($image, $optimizerChain); } $this->info('Todas las imágenes han sido optimizadas.'); } protected function optimizeImage($image, $optimizerChain) { if (preg_match('/\.(jpg|jpeg|png|gif|svg)$/i', $image)) { $optimizerChain->optimize(Storage::path($image)); $this->info("Optimized: $image"); } } }
Paso 4: Ejecutar el Comando
Después de guardar el archivo, puedes optimizar todas las imágenes ejecutando el siguiente comando en la terminal:
php artisan images:optimize
Explicación
- $optimizerChain = OptimizerChainFactory::create();: Crea una cadena de optimizadores que procesará cada imagen para reducir su tamaño sin perder calidad perceptible.
- Storage::allFiles('public/img'); y Storage::allFiles('public');: Estos métodos obtienen todas las rutas de los archivos dentro de public/img y storage/app/public, incluyendo los subdirectorios.
- preg_match('/\.(jpg|jpeg|png|gif|svg)$/i', $image): Filtra las imágenes para asegurarse de que solo se optimizan archivos de imagen comunes.
- $optimizerChain->optimize(Storage::path($image));: Optimiza la imagen en la ruta dada.
Paso 5: Programar la Ejecución Automática (Opcional)
Si deseas que este proceso se ejecute automáticamente, puedes agregarlo al cron de Laravel. Abre app/Console/Kernel.php y agrega lo siguiente al método schedule:
protected function schedule(Schedule $schedule) { $schedule->command('images:optimize')->weekly(); }
Resumen
- Archivo creado: app/Console/Commands/OptimizeImages.php
- Comando para ejecutar: php artisan images:optimize
Este comando optimizará todas las imágenes en los directorios especificados, lo que puede mejorar significativamente el rendimiento de tu aplicación.
- Categoria: web_development
- URL: https://spatie.be/docs/image/v3/image-manipulations/optimizing-images
- YouTube: https://www.youtube.com/watch?v=5Ftv0QnTbwo
- Etiquetes: image, laravel
- Data de creació: 31/08/2024
- Última actualització: 31/08/2024