Traitement d'images en PHP : redimensionnement et recadrage (resize, crop)
Le traitement d'images est l'une des tâches les plus courantes lors du développement d'applications web. Téléchargement d'avatars, création de miniatures, adaptation d'images à différentes résolutions d'écran — tout cela nécessite un redimensionnement (resize) et un recadrage (crop). En PHP, il existe deux outils principaux à cet effet : l'extension intégrée GD et la bibliothèque plus puissante Imagick. Dans cet article, nous aborderons les deux approches avec des exemples pratiques.
1. Extension GD (outil standard)
GD est l'extension la plus populaire et la plus accessible pour le traitement d'images. Elle est intégrée dans la plupart des distributions PHP et ne nécessite pas d'installation supplémentaire. GD prend en charge les formats principaux : JPEG, PNG, GIF, WebP.
1.1. Redimensionnement (resize) avec conservation des proportions
La tâche classique consiste à réduire une grande image à une largeur donnée, tout en conservant le rapport hauteur/largeur. Voici un exemple de fonction qui redimensionne une image à une largeur spécifiée.
<?phpfunction resizeImage($srcFile, $destFile, $newWidth) { // Obtenir les informations de l'image source list($width, $height, $type) = getimagesize($srcFile);
// Calculer la nouvelle hauteur proportionnellement $ratio = $width / $height; $newHeight = $newWidth / $ratio;
// Créer un canevas pour la nouvelle image $srcImage = imagecreatefromjpeg($srcFile); // pour JPEG $destImage = imagecreatetruecolor($newWidth, $newHeight);
// Copier et redimensionner imagecopyresampled($destImage, $srcImage, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
// Enregistrer le résultat imagejpeg($destImage, $destFile, 90); // qualité 90%
// Libérer la mémoire imagedestroy($srcImage); imagedestroy($destImage);}
// Exemple d'utilisationresizeImage('photo.jpg', 'photo_thumb.jpg', 300);?>Pour travailler avec PNG ou GIF, il faut utiliser les fonctions imagecreatefrompng() et imagecreatefromgif(), et enregistrer via imagepng() ou imagegif().
1.2. Recadrage d'image (crop) centré
Il est souvent nécessaire non seulement de réduire, mais de découper une zone carrée au centre de l'image. C'est ce qu'on appelle un crop centré.
<?phpfunction cropCenter($srcFile, $destFile, $cropSize) { list($width, $height, $type) = getimagesize($srcFile);
// Déterminer les coordonnées pour découper un carré au centre $srcX = ($width - $cropSize) / 2; $srcY = ($height - $cropSize) / 2;
// Si l'image est plus petite que la taille requise, on la redimensionne simplement if ($width < $cropSize || $height < $cropSize) { $ratio = min($cropSize / $width, $cropSize / $height); $newWidth = $width * $ratio; $newHeight = $height * $ratio; $srcImage = imagecreatefromjpeg($srcFile); $destImage = imagecreatetruecolor($cropSize, $cropSize); // Remplir avec un fond blanc $white = imagecolorallocate($destImage, 255, 255, 255); imagefill($destImage, 0, 0, $white); // Copier avec centrage imagecopyresampled($destImage, $srcImage, ($cropSize - $newWidth) / 2, ($cropSize - $newHeight) / 2, 0, 0, $newWidth, $newHeight, $width, $height); } else { $srcImage = imagecreatefromjpeg($srcFile); $destImage = imagecreatetruecolor($cropSize, $cropSize); imagecopyresampled($destImage, $srcImage, 0, 0, $srcX, $srcY, $cropSize, $cropSize, $cropSize, $cropSize); }
imagejpeg($destImage, $destFile, 90); imagedestroy($srcImage); imagedestroy($destImage);}
// Exemple : carré 200x200 depuis le centrecropCenter('photo.jpg', 'photo_cropped.jpg', 200);?>2. Bibliothèque Imagick (outil avancé)
Imagick est une surcouche PHP pour le puissant utilitaire ImageMagick. Elle pré
Aussi dans la bibliothèque
Files d'attente de tâches en C# (.NET) : System.Threading.Channels, Hangfire et RabbitMQ
Travailler avec XML en TypeScript : bibliothèques, analyse et création de documents XML
Configuration des applications Node.js : meilleures bibliothèques et pratiques
Configuration des applications Go : la bibliothèque viper