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.