La solution était heureusement plutôt simple, grâce à la magie de l’open source !
Le package spatie/laravel-image-optimizer
fournit quasiment tout le code nécessaire pour optimiser les images avant qu’elles ne soient enregistrées par votre application. Encore mieux : on peut l’utiliser comme middleware pour automatiser le traitement !
Installation du paquet
Installer le paquet PHP est très simple, ça se passe comme d’habitude avec Composer :
composer require spatie/laravel-image-optimizer
Ensuite on peut générer le fichier de configuration, pour ceux qui voudraient un réglage différent des paramètres par défaut (c’est ce que j’ai fait pour changer la qualité souhaitée) :
php artisan vendor:publish --provider="Spatie\LaravelImageOptimizer\ImageOptimizerServiceProvider"
Le fichier config/image-optimizer.php
peut alors être modifié à volonté.
J’ai surtout touché à la qualité pour ne pas trop perdre sur le rendu.
À voir à l’usage si le résultat me convient, je surchargerai peut-être les valeurs selon les besoins.
Utilisation du middleware
L’intégration se fait assez facilement puisqu’un middleware est fourni.
On commence par ajouter le middleware au lancement de Laravel :
Et on l’utilise sur notre route :
Configuration du serveur
Pour optimiser un maximum de formats d’image, il vaut mieux s’assurer que les bons outils sont installés sur le serveur.
Facile, Ansible est là pour ça !
On ajoute le rôle au fichier global de recette :
On applique le rôle, et c’est parti pour déployer le nouveau code (en n’oubliant pas de faire un composer update
) !
ansible-playbook -i hosts --vault-password-file .vault-password install.yml --tags="install,image-optimizer"
ansible-playbook -i hosts --vault-password-file .vault-password deploy.yml
Et voilà, c’est publié !