Traitement des images en PHP : redimensionnement, recadrage et optimisation
\n\nLe traitement des images est l'une des tâches clés lors du développement d'applications web. Qu'il s'agisse d'avatars d'utilisateurs, d'aperçus pour des actualités ou de galeries de produits, vous aurez presque toujours besoin de redimensionner (resize) et de recadrer (crop) des images. En PHP, il existe deux bibliothèques principales pour cela : GD (intégrée) et Imagick (extension basée sur ImageMagick).
\n\nDans cet article, nous aborderons les deux approches, montrerons des exemples de code fonctionnels et donnerons des recommandations sur la bibliothèque à choisir pour votre projet.
\n\n1. Bibliothèque GD (GDLib)
\n\nGD est une extension PHP standard, disponible sur pratiquement tous les hébergements. Elle prend en charge les formats principaux : JPEG, PNG, GIF, WEBP (depuis PHP 7.1+). L'inconvénient est une qualité de rééchantillonnage inférieure à celle d'Imagick, mais pour la plupart des tâches, ses capacités sont suffisantes.
\n\n1.1. Redimensionnement (resize) avec GD
\n\nLa fonction imagecopyresampled() crée une nouvelle image avec interpolation (lissage). Exemple de mise à l'échelle à une largeur de 300px en conservant les proportions :
<?php\nfunction resizeImageGD($srcFile, $destFile, $newWidth = 300) {\n // Obtenir les dimensions de l'image source\n list($width, $height, $type) = getimagesize($srcFile);\n \n // Créer une ressource d'image source en fonction du type\n switch ($type) {\n case IMAGETYPE_JPEG:\n $src = imagecreatefromjpeg($srcFile);\n break;\n case IMAGETYPE_PNG:\n $src = imagecreatefrompng($srcFile);\n break;\n case IMAGETYPE_GIF:\n $src = imagecreatefromgif($srcFile);\n break;\n default:\n return false;\n }\n \n // Calculer la nouvelle hauteur proportionnellement\n $ratio = $width / $height;\n $newHeight = intval($newWidth / $ratio);\n \n // Créer une image vide de la taille souhaitée\n $dst = imagecreatetruecolor($newWidth, $newHeight);\n \n // Activer le canal alpha pour PNG/GIF\n imagealphablending($dst, false);\n imagesavealpha($dst, true);\n \n // Rééchantillonnage (copie avec recalcul des pixels)\n imagecopyresampled($dst, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);\n \n // Enregistrer le résultat\n imagejpeg($dst, $destFile, 85); // qualité 85%\n \n // Libérer la mémoire\n imagedestroy($src);\n imagedestroy($dst);\n \n return true;\n}\n\n// Utilisation :\nresizeImageGD('photo.jpg', 'photo_thumb.jpg', 300);\n?>\n\n1.2. Recadrage (crop) avec GD
\n\nPour le recadrage, nous utilisons la fonction imagecopy() ou imagecopyresampled() en spécifiant la zone. Exemple — découper un carré central de 200x200 :
<?php\nfunction cropCenterGD($srcFile, $destFile, $cropSize = 200) {\n list($width, $height, $type) = getimagesize($srcFile);\n \n // Déterminer le type\n $src = imagecreatefromjpeg($srcFile); // pour l'exemple JPEG\n \n // Calculer les coordonnées du carré central\n $x = ($width - $cropSize) / 2;\n $y = ($height - $cropSize) / 2;\n \n // Si l'image source est plus petite que la taille de recadrage — ne pas recadrer\n if ($width < $cropSize || $height < $cropSize) {\n $cropSize = min($width, $height);\n $x = 0;\n $y = 0;\n }\n \n $dst = imagecreatetruecolor($cropSize, $cropSize);\n imagecopy($dst, $src, 0, 0, $x, $y, $cropSize, $cropSize);\n \n imagejpeg($dst, $destFile, 90);\n imagedestroy($src);\n imagedestroy($dst);\n}\n\ncropCenterGD('photo.jpg', 'cropped.jpg', 200);\n?>\n\n2. Bibliothèque Imagick
\n\nImagick est une extension puissante offrant une interface orientée objet vers ImageMagick. Elle prend en charge plus de 200 formats, une excellente qualité de rééchantillonnage, la gestion des couleurs, des filtres et de l'animation. Nécessite une installation sur le serveur (pas toujours disponible sur les hébergements bon marché).
Aussi dans la bibliothèque
Bibliothèque standard Java (Java Standard Library)
Générateur de QR codes en JavaScript (Node.js) avec qrcode et qr-image
Apprentissage automatique : bibliothèques TypeScript pour navigateur et Node.js
Turbine Kotlin : guide complet avec exemples de test Flow