Lorsque vous utilisez la bibliothèque GD de PHP pour traiter les images, de nombreux développeurs rencontreront une telle confusion:
"J'ai clairement défini une couleur transparente avec ImageColorallocatealpha () , pourquoi le dernier fichier PNG est-il entièrement opaque?"
Analyons attentivement ce problème et trouvons la bonne solution.
Supposons d'abord que vous ayez écrit un code comme ceci:
<?php
$width = 200;
$height = 100;
// Créer une vraie image couleur
$image = imagecreatetruecolor($width, $height);
// Attribuez une couleur avec transparence
// Ordre des paramètres:R, G, B, Alpha(0 Totalement opaque,127 Complètement transparent)
$transparentColor = imagecolorallocatealpha($image, 255, 0, 0, 127);
// Remplissez l'arrière-plan de cette couleur
imagefill($image, 0, 0, $transparentColor);
// Sauver en tant que PNG
imagepng($image, 'output.png');
// Détruire les ressources
imagedestroy($image);
?>
Vous vous attendez à générer une image PNG complètement transparente sur un fond rouge, mais après avoir ouvert le fichier, vous constatez que l'arrière-plan est opaque rouge.
Pourquoi?
L'imageColorallocatealPha () de la bibliothèque GD est juste attribuée à une couleur contenant les informations alpha, mais cela ne signifie pas que lors de l'enregistrement du fichier PNG, GD conservera automatiquement le canal alpha.
Pour réaliser les informations de transparence correctement enregistrées en PNG, vous devez activer explicitement deux choses:
Allumez le canal alpha pour enregistrer <br> Utilisez ImagesVealpha ($ Image, True) pour dire à la bibliothèque GD d'inclure un canal alpha lors de l'enregistrement de PNG.
Éteignez le mélange alpha (facultatif, mais recommandé)
Utilisez ImageAlphable
<?php
$width = 200;
$height = 100;
// Créer une vraie image couleur
$image = imagecreatetruecolor($width, $height);
// fermeture alpha mélanger(Pour enregistrer correctement le fond transparent)
imagealphablending($image, false);
// Activer la sauvegarde alpha Informations sur les canaux
imagesavealpha($image, true);
// 分配一个Complètement transparent的红色
$transparentColor = imagecolorallocatealpha($image, 255, 0, 0, 127);
// Remplissez l'arrière-plan de cette couleur
imagefill($image, 0, 0, $transparentColor);
// Sauver en tant que PNG
imagepng($image, 'output.png');
// Ou enregistrer sur la page Web pour sortir directement
// header('Content-Type: image/png');
// imagepng($image);
// Détruire les ressources
imagedestroy($image);
?>
Ce code génère une image PNG avec un fond rouge transparent.
Si vous définissez une couleur transparente avec ImageColorAllocatEalpha () en PHP, mais la PNG enregistrée est opaque, c'est généralement parce que vous avez oublié:
? Utilisez ImageAlphable
? Utilisez ImagesVealpha ($ Image, True)
Ces deux étapes sont essentielles pour la préservation PNG transparente.