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
Libérer: 2024-12-03 02:43:09
original
1048 Les gens l'ont consulté

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 );
Copier après la connexion

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 );
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal