Ingénieure informatique Freelance Toulouse
Spécialisée dans le développement Web

menu button

Redimensionner une image PNG transparente en PHP

Posté le 12/10/2015 - par Amy Wiggenhauser - dans Non classés

illustration

Les sites internet qui proposent de télécharger des images (comme des images de profil sur un forum ou un blog par exemple) ont souvent besoin de les redimensionner pour optimiser l'espace qu'elles occupent et diminuer leur temps de chargement.

Les images en PNG ont une particularité : elles possèdent de la transparence. Pour que celle-ci soit préservée après le redimentionnement, il est nécessaire d'utiliser une méthode adaptée.

En effet, dans le cas contraire, la transparence risque d'être remplacée par une autre couleur comme du noir, ce qui peut s'avérer désastreux pour le rendu de l'image.

Méthodologie

  • Récupérer l'image PNG à redimensionner
  • Créer une copie de travail temporaire
  • Créer une nouvelle image temporaire de taille réduite
  • Copier l'image de base vers l'image de taille réduite en préservant la transparence
  • Enregistrer l'image réduite
  • Détruire les deux images temporaires

Dans les lignes qui suivent, on suppose que l'image à redimensionner est téléchargée depuis un formulaire PHP (form), et qu'on souhaite la redimensionner à une taille de 100px de hauteur en gardant les mêmes proportions.

Code PHP

//récupérer l'image à redimensionner depuis un formulaire PHP (ou autre méthode de votre choix)
$image = $_FILES['file']['tmp_name'][0];

//créer une copie de travail de l'image de base
$mon_image = imagecreatefrompng($image);
//préserver la transparence
imagesavealpha($mon_image, true);

//redimensionner l'image à 100px de hauteur
$image_sizes = getimagesize($image);
$ratio = round($image_sizes[0] * 100 / $image_sizes[1]);

//créer une image temporaire de taille réduire
$mon_image2 = imagecreatetruecolor($ratio, 100);
//préserver la transparence de l'image réduite
imagesavealpha($mon_image2, true);
$trans_colour = imagecolorallocatealpha($mon_image2, 0, 0, 0, 127);
imagefill($mon_image2, 0, 0, $trans_colour);

//redimensionner l'image
imagecopyresized($mon_image2, $mon_image, 0, 0, 0, 0, $ratio, 100, $image_sizes[0], $image_sizes[1]);
//préserver la transparence
imagesavealpha($mon_image2, true);

//enregistrer l'image réduite
imagepng($mon_image2, "repertoire/nom-de-l-image.png", 0);

//détruire les images temporaires
imagedestroy($mon_image);
imagedestroy($mon_image2);

Et voila !

 

Crédit photo : Freepik from www.flaticon.com is licensed by CC BY 3.0

Commentaires

Aucun commentaire pour le moment.


Laisser un commentaire

Pseudo * :
Votre adresse email * (ne sera pas publiée) :
Commentaire * :


* Champs obligatoires

Pour connaitre et exercer vos droits, notamment de retrait de votre consentement à l'utilisation des données collectées par ce formulaire, veuillez consulter notre politique de confidentialité.

Autres réalisations