Optimisation d’image à l’aide du package artisansweb/image-optimizer
Cela fait maintenant 4 ans que je dirige ce blog. Parallèlement à ce blog, je gère également une chaîne YouTube où je partage des vidéos qui montrent comment mettre en œuvre mes articles.
Je crois en l’open source. Sur mon site Web, je ne propose aucun abonnement payant, je ne vends pas de livres électroniques ou de cours. J’aime garder les ressources gratuites. Dans cet esprit, j’ai créé mon premier package GitHub artisansweb/image-optimizer qui se charge d’optimiser les images pour votre site Web.
J’ai écrit quelques articles sur l’optimisation d’image dans le passé. Jusqu’à présent, TinyPNG était mon préféré et il l’est toujours. Mais la limitation avec TinyPNG est qu’ils permettent d’optimiser 500 images gratuites par mois. Au-dessus de 500 images, vous facturerez par image.
Quelques articles précédents sur l’optimisation d’image :
- Télécharger et compresser plusieurs images en PHP
- Comment optimiser l’image lors du téléchargement en PHP
Il existe également d’autres packages, mais ils nécessitent l’installation de logiciels tels que JpegOptim, Optipng, etc. sur notre machine. Ce n’est pas non plus une solution réalisable.
L’année dernière, je travaillais sur le projet d’un client qui avait des milliers d’images à compresser. Nous recherchions un service open source et efficace qui puisse faire notre travail. Ensuite, nous avons découvert reSmush.it, un service entièrement gratuit pour l’optimisation des images.
Bien que j’aie écrit un article sur reSmush.it, je sens que je peux créer un package GitHub à partir de celui-ci et je l’ai fait. Si vous lisez mon article sur reSmush.it, vous constaterez qu’il doit ajouter environ 25 à 30 lignes de code. Mais si vous optez pour le package, cela peut être fait en 5 à 6 lignes.
Cela étant dit, voyons comment installer et utiliser artisansweb/image-optimizer
package.
Optimisation des images avec PHP
Dans un premier temps, vous devez installer le package à l’aide de Composer en exécutant la commande :
composer require artisansweb/image-optimizer
Lors de l’installation du package, vous pouvez optimiser l’image à l’aide du code ci-dessous.
<?php
require_once "vendor/autoload.php";
use ArtisansWebOptimizer;
$img = new Optimizer();
$source = 'SOURCE_PATH_OF_IMAGE';
$img->optimize($source);
Ici, vous devez transmettre le chemin complet du répertoire de l’image source et votre image source est optimisée automatiquement. Parfois, vous devez conserver l’image d’origine et stocker la version optimisée dans un autre répertoire. Dans ce cas, vous pouvez utiliser un deuxième paramètre pour la destination.
<?php
$source = 'SOURCE_PATH_OF_IMAGE';
$destination = 'DESTINATION_PATH_OF_IMAGE';
$img->optimize($source, $destination);
En utilisant le code ci-dessus, vous pouvez optimiser vos images qui se trouvent dans votre répertoire. Cependant, je recommanderais d’optimiser l’image lors du téléchargement afin que vous n’ayez pas besoin d’effectuer des tâches d’optimisation séparément.
L’utilisateur peut optimiser l’image sur le téléchargement comme suit.
<?php
require_once "vendor/autoload.php";
use ArtisansWebOptimizer;
if (isset($_POST['submit'])) {
$img = new Optimizer();
move_uploaded_file($_FILES['file']['tmp_name'], 'images/'.$_FILES['file']['name']);
$img->optimize('images/'.$_FILES['file']['name']);
}
?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" name="submit" value="Submit" />
</form>
Bien que reSmush.it ait compressé des milliards d’images jusqu’à présent, il est possible que leur service soit en panne pour une raison quelconque. J’ai géré ce scénario dans le package. Pour une raison quelconque, si le package n’obtient pas de version optimisée de reSmush.it, il utilise comme solution de secours les méthodes natives de PHP telles que imagecreatefromjpeg, imagecreatefrompng, imagecreatefromgif, imagejpeg pour l’optimisation.
Il y a plusieurs nouvelles fonctionnalités en cours que je vais ajouter dans le package et le publier bientôt.
Je serai heureux si vous utilisez le package et faites-moi savoir comment cela fonctionne dans la section commentaire ci-dessous. Veuillez partager vos commentaires afin que nous puissions ensemble améliorer ce package qui aidera la communauté.