Primero, instala el paquete necesario usando Composer:
composer require spatie/laravel-image-optimizer
Vamos a crear un nuevo comando Artisan para optimizar todas las imágenes en los directorios mencionados.
php artisan make:command OptimizeImages
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"); } } }
Después de guardar el archivo, puedes optimizar todas las imágenes ejecutando el siguiente comando en la terminal:
php artisan images:optimize
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(); }
Este comando optimizará todas las imágenes en los directorios especificados, lo que puede mejorar significativamente el rendimiento de tu aplicación.