Traitement des images en PHP : redimensionnement, recadrage et optimisation avec GD et Imagick

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Traitement des images en PHP : redimensionnement, recadrage et optimisation

\n\n

Le 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\n

Dans 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\n

1. Bibliothèque GD (GDLib)

\n\n

GD 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\n

1.1. Redimensionnement (resize) avec GD

\n\n

La fonction imagecopyresampled() crée une nouvelle image avec interpolation (lissage). Exemple de mise à l'échelle à une largeur de 300px en conservant les proportions :

\n\n
<?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\n

1.2. Recadrage (crop) avec GD

\n\n

Pour le recadrage, nous utilisons la fonction imagecopy() ou imagecopyresampled() en spécifiant la zone. Exemple — découper un carré central de 200x200 :

\n\n
<?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\n

2. Bibliothèque Imagick

\n\n

Imagick 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é).

Recommendations