Comment optimiser l’image lors du téléchargement en PHP
Récemment, l’un des lecteurs m’a demandé comment optimiser les images lors du téléchargement en PHP. Pour répondre à la question, j’ai décidé d’écrire un article qui montrera comment réduire ou compresser la taille du fichier au moment de le télécharger.
En tant que développeur, le téléchargement de fichiers est notre tâche habituelle. Nous le faisons toujours de manière traditionnelle. En utilisant la fonction intégrée, move_uploaded_file
nous déplaçons les images dans le répertoire et les laissons telles quelles. Pensons-nous à quelques points comme quelle est la taille de l’image téléchargée ? Cette image mettra-t-elle du temps à se charger sur un site Web ? Puis-je optimiser une image sans perdre sa qualité ?
Les images jouent un rôle important dans la vitesse du site. Les images lourdes ralentissent la vitesse de la page, ce qui entraîne une perte de votre audience et de votre trafic. Cette situation n’est pas abordable. Nous faisons beaucoup d’efforts pour développer l’audience et le trafic. Donc, en tant que bonne pratique, vous devez optimiser l’image lors du téléchargement.
Dans cet article, je vais utiliser le service TinyPNG pour optimiser les images. Nous allons écrire un code pour cela dans quelques instants. En attendant, ci-dessous se trouve la capture d’écran de tinypng.com pour visualiser la différence entre l’image originale et optimisée.
Utilisez TinyPNG pour optimiser l’image lors du téléchargement
Pour commencer, vous devez installer la bibliothèque TinyPNG. Installez la bibliothèque à l’aide de la commande ci-dessous.
composer require tinify/tinify
Après avoir installé la bibliothèque, récupérez votre clé API sur le site Web de TinyPNG.
Remarque: TinyPNG permet de compresser 500 images gratuitement par mois. Pour plus de 500 images, vous devez les payer. Si vous exploitez un petit site Web, ce quota est suffisant.
Une fois que vous êtes prêt avec la clé API, commençons par le code. Je crée un formulaire HTML simple qui contient une entrée de fichier et un bouton d’envoi.
<form method="post" enctype="multipart/form-data">
<p><input type="file" name="myfile" accept="image/*" required /></p>
<button type="submit" name="submit">Submit</button>
</form>
Lorsque les utilisateurs téléchargent une image à l’aide de ce formulaire, les développeurs écrivent le type de code ci-dessous pour déplacer l’image téléchargée sur le serveur.
if (isset($_POST['submit'])) {
$allowed_mime_types = array('image/gif', 'image/jpg', 'image/jpeg', 'image/png');
if (!in_array($_FILES['myfile']['type'], $allowed_mime_types)) {
echo 'Invalid file format.';
exit();
}
if (!file_exists(getcwd().'/uploads')) {
mkdir(getcwd().'/uploads', 0777);
}
$src_file_name = $_FILES['myfile']['name'];
move_uploaded_file($_FILES['myfile']['tmp_name'], getcwd().'/uploads/'.$src_file_name);
echo "File uploaded successfully";
}
Le code ci-dessus est correct et il n’y a aucun problème à l’exception de la partie manquante de l’optimisation de l’image. Pour optimiser les images, il suffit d’ajouter 2 lignes de code après l’ move_uploaded_file
instruction.
//optimize image using TinyPNG
$source = TinifyfromFile(getcwd().'/uploads/'.$src_file_name);
$source->toFile(getcwd().'/uploads/'.$src_file_name);
Les 2 lignes ci-dessus prennent une image du chemin source, l’optimisent avec la bibliothèque TinyPNG sans perte de qualité et l’enregistrent dans le même chemin source. En d’autres termes, il remplace l’image d’origine par la version optimisée.
Notre code final est le suivant.
<?php
require_once("vendor/autoload.php");
TinifysetKey("TINYPNG_API_KEY"); //pass your actual API key
if (isset($_POST['submit'])) {
$allowed_mime_types = array('image/gif', 'image/jpg', 'image/jpeg', 'image/png');
if (!in_array($_FILES['myfile']['type'], $allowed_mime_types)) {
echo 'Invalid file format.';
exit();
}
if (!file_exists(getcwd().'/uploads')) {
mkdir(getcwd().'/uploads', 0777);
}
$src_file_name = $_FILES['myfile']['name'];
move_uploaded_file($_FILES['myfile']['tmp_name'], getcwd().'/uploads/'.$src_file_name);
//optimize image using TinyPNG
$source = TinifyfromFile(getcwd().'/uploads/'.$src_file_name);
$source->toFile(getcwd().'/uploads/'.$src_file_name);
echo "File uploaded successfully.";
}
?>
<form method="post" enctype="multipart/form-data">
<p><input type="file" name="myfile" accept="image/*" required /></p>
<button type="submit" name="submit">Submit</button>
</form>
Allez-y et essayez-le. Vous devriez voir la version optimisée de l’image être stockée dans votre répertoire.
J’espère que vous comprenez comment optimiser l’image lors du téléchargement en PHP. J’aimerais entendre vos pensées et suggestions dans la section des commentaires ci-dessous.
Articles Liés
- TinyPNG compresse des images à l’aide de PHP
- Télécharger et compresser plusieurs images en PHP
- Un guide pour télécharger et compresser des images dans Laravel