Redimensionner les PNG avec transparence à l'aide de GDlib de PHP
Préserver la transparence de l'image est essentiel lorsqu'il s'agit de fichiers PNG. Bien que GDlib offre des capacités de manipulation d'images, le redimensionnement des PNG avec une transparence préservée peut présenter un défi.
Un problème rencontré lors de l'utilisation de la fonction imagecopyresampled de GD est que les zones transparentes du PNG d'origine sont remplacées par une couleur unie. Cela se produit malgré la définition de imagesavealpha sur true.
Pour résoudre ce problème, il est crucial de spécifier correctement les paramètres alpha. En PHP, les paramètres alpha s'appliquent à l'image cible, pas à l'image source. En ajustant les propriétés alpha de l'image cible, nous pouvons obtenir une préservation de la transparence :
imagealphablending( $targetImage, false ); imagesavealpha( $targetImage, true );
imagealphablending(false) désactive tout mélange et respecte le canal alpha de l'image. imagesavealpha(true) garantit que le canal alpha du PNG est préservé dans la sortie.
Voici un extrait de code PHP révisé qui intègre ces ajustements :
$uploadTempFile = $myField[ 'tmp_name' ] list( $uploadWidth, $uploadHeight, $uploadType ) = getimagesize( $uploadTempFile ); $srcImage = imagecreatefrompng( $uploadTempFile ); $targetImage = imagecreatetruecolor( 128, 128 ); imagealphablending( $targetImage, false ); imagesavealpha( $targetImage, true ); imagecopyresampled( $targetImage, $srcImage, 0, 0, 0, 0, 128, 128, $uploadWidth, $uploadHeight ); imagepng( $targetImage, 'out.png', 9 );
Ce code modifié devrait effectivement redimensionner le PNG image tout en préservant la transparence. Notez qu'il n'est pas garanti qu'il soit parfait dans tous les cas, mais il constitue un point de départ solide.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!