Télécharger et compresser plusieurs images en PHP
Récemment, l’un de nos lecteurs a demandé comment télécharger et compresser plusieurs images en PHP. Il existe certains scénarios où nous devons permettre aux utilisateurs de télécharger plusieurs images. C’est toujours une bonne pratique d’optimiser les images au moment du téléchargement. Dans cet article, nous étudions le téléchargement de plusieurs images et comment compresser les images pendant le processus de téléchargement.
Pourquoi devons-nous réduire la taille du fichier image ?
Sans aucun doute, les images jouent un rôle important dans votre site Web. Des images accrocheuses attirent l’attention des lecteurs et ils passeraient plus de temps sur le site Web. Mais en même temps, les images de grande taille ralentissent votre site Web. Comme il faut plus de bande passante, votre site Web met plus de temps à charger les pages Web. Les propriétaires de sites doivent faire attention à réduire la taille du fichier image et utiliser le meilleur outil de compression d’image pour cela.
Je vais vous montrer 2 façons de compresser des images – TinyPNG et le package artisansweb/image-optimizer.
TinyPNG est l’un des services de compression d’images les plus populaires sur le Web. Ce service permet de compresser 500 images par mois gratuitement via leurs API. Pour plus de 500 images, vous devez les payer.
Si vous devez optimiser plus de 500 images par mois et que vous ne voulez pas payer, alors utilisez le package ‘artisansweb/image-optimizer’. Ce package utilise le service reSmush.it pour l’optimisation des images.
Je recommanderais d’essayer les deux solutions, de comparer la sortie et de choisir celle qui vous convient.
Cela dit, voyons comment compresser les images après les avoir téléchargées.
Premiers pas avec TinyPNG
Pour commencer, vous devez obtenir une clé API de TinyPNG. Cliquez ici pour obtenir votre clé API. Il vous suffit d’entrer votre nom et votre adresse e-mail et vous recevrez l’e-mail de votre clé.
Une fois que vous obtenez votre clé de développeur, installez une bibliothèque PHP fournie par TinyPNG. Vous devez avoir Composer installé sur le système pour installer la bibliothèque. Ouvrez le terminal dans le répertoire racine de votre projet et exécutez la commande :
composer require tinify/tinify
Comment compresser des images avec TinyPNG
Comme mentionné dans le titre de cet article, nous allons voir comment télécharger et compresser plusieurs images. Pour cela, nous devons créer un formulaire HTML avec une entrée de fichier pour parcourir plusieurs images. Créez index.php
et placez le code ci-dessous dedans.
index.php
<form method="post" enctype="multipart/form-data" action="process_images.php">
<p>
<label>Upload Images</label>
<input type="file" name="images[]" accept="image/*" multiple>
</p>
<button type="submit" name="submit">Submit</button>
</form>
Au fichier d’entrée, j’ai donné un nom sous forme d’images[]. En effet, côté serveur, nous avons besoin d’un tableau de fichiers car l’utilisateur va parcourir plusieurs images.
Une fois que nous avons parcouru les images et cliqué sur le bouton Soumettre, les données du formulaire seront envoyées au fichier process_images.php
. C’est le fichier dans lequel nous devons écrire un code pour télécharger et compresser des images.
process_images.php
<?php
// Increase PHP execution time
set_time_limit(0);
require_once("vendor/autoload.php");
TinifysetKey("YOUR_API_KEY");
if (isset($_POST['submit'])) {
$supported_images = array('image/gif', 'image/jpg', 'image/jpeg', 'image/png');
if (!file_exists(getcwd(). '/uploads')) {
mkdir(getcwd(). '/uploads', 0777);
}
foreach($_FILES['images']['name'] as $key=>$val) {
$file_name = $_FILES['images']['name'][$key];
// get file extension
$ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
// get filename without extension
$filenamewithoutextension = pathinfo($file_name, PATHINFO_FILENAME);
if (in_array($_FILES['images']['type'][$key], $supported_images)) {
$filename_to_store = $filenamewithoutextension.'_'.time().'.' .$ext;
move_uploaded_file($_FILES['images']['tmp_name'][$key], getcwd().'/uploads/'.$filename_to_store);
// optimize image using TinyPNG
try {
$source = TinifyfromFile(getcwd().'/uploads/'.$filename_to_store);
$source->toFile(getcwd().'/uploads/'.$filename_to_store);
} catch(Exception $e) {
echo $e->getMessage();
exit;
}
}
}
echo "Files uploaded successfully.";
}
Assurez-vous de remplacer l’espace réservé par votre clé API réelle. Dans le code ci-dessus, nous générons un nom de fichier unique en y ajoutant une heure. Une fois qu’une image est téléchargée sur le serveur, nous l’envoyons à l’API TinyPNG pour optimisation. En retour, nous obtenons la version compressée de l’image que nous stockons au même endroit et avec le même nom de fichier.
Compresser les images à l’aide du package artisansweb/image-optimizer
J’ai développé le package Image Optimizer. Ce package utilise le service reSmush.it sous le capot pour optimiser les images. Si vous recherchez un service gratuit, essayez ce package. Le reSmush.it a optimisé des milliards d’images jusqu’à présent. Ce forfait ne nécessite pas de fournir de clé ou d’enregistrement. Il suffit de le brancher et le tour est joué.
Pour commencer avec le package Image Optimizer, installez-le à l’aide de la commande :
composer require artisansweb/image-optimizer
Ensuite, le code dans le process_image.php
sera modifié comme suit.
<?php
// Increase PHP execution time
set_time_limit(0);
require_once("vendor/autoload.php");
use ArtisansWebOptimizer;
if (isset($_POST['submit'])) {
$supported_images = array('image/gif', 'image/jpg', 'image/jpeg', 'image/png');
if (!file_exists(getcwd(). '/uploads')) {
mkdir(getcwd(). '/uploads', 0777);
}
foreach($_FILES['images']['name'] as $key=>$val) {
$file_name = $_FILES['images']['name'][$key];
// get file extension
$ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
// get filename without extension
$filenamewithoutextension = pathinfo($file_name, PATHINFO_FILENAME);
if (in_array($_FILES['images']['type'][$key], $supported_images)) {
$filename_to_store = $filenamewithoutextension.'_'.time().'.' .$ext;
move_uploaded_file($_FILES['images']['tmp_name'][$key], getcwd().'/uploads/'.$filename_to_store);
// optimize image
try {
$img = new Optimizer();
$source = getcwd().'/uploads/'.$filename_to_store;
$img->optimize($source);
} catch(Exception $e) {
echo $e->getMessage();
exit;
}
}
}
echo "Files uploaded successfully.";
}
J’espère que vous comprenez comment télécharger et compresser plusieurs images en PHP. J’aimerais entendre vos pensées et suggestions dans la section des commentaires ci-dessous.
Articles Liés
- Glisser-déposer le téléchargement de fichiers à l’aide de JavaScript et PHP
- Redimensionner l’image en PHP à l’aide de la bibliothèque d’images d’intervention
- Télécharger une image à l’aide de la bibliothèque Bulletproof en PHP