Maison >développement back-end >tutoriel php >Comment puis-je redimensionner des fichiers PNG avec transparence à l'aide de GDlib de PHP et préserver les canaux alpha ?

Comment puis-je redimensionner des fichiers PNG avec transparence à l'aide de GDlib de PHP et préserver les canaux alpha ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-03 02:43:091003parcourir

How Can I Resize PNGs with Transparency Using PHP's GDlib and Preserve Alpha Channels?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn