Traitement d'images en PHP : resize, crop (recadrage et redimensionnement)

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 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é

Recommendations