Lorsque vous utilisez PHP pour le traitement d'image, la bibliothèque GD fournit de nombreuses fonctions puissantes, où ImageColorAllocatEalPha () est une fonction pour attribuer des couleurs avec transparence. Lorsque vous l'utilisez, de nombreux développeurs constatent que même si la couleur transparente est attribuée, les fichiers PNG ou GIF enregistrés sont toujours complètement opaques. Pourquoi est-ce? La clé du problème réside dans une autre fonction qui est facilement négligé: imagesVealpha () .
L'utilisation de base de l'imageColorallocatealpha () est la suivante:
$image = imagecreatetruecolor(200, 200);
$transparentColor = imagecolorallocatealpha($image, 255, 0, 0, 127); // rouge,Complètement transparent
Ses paramètres incluent le rouge, le vert, le bleu et la transparence (0 ~ 127, 0 signifie complètement opaque et 127 signifie complètement transparent). En utilisant cette fonction, vous pouvez dessiner des éléments transparents sur l'image, tels que les rectangles translucides, le texte, etc.
Cependant, cette fonction n'est responsable que de l'allocation des couleurs et ne dit pas automatiquement à la bibliothèque GD de "s'il vous plaît garder le canal alpha lors de la sortie de l'image".
C'est ce que fait ImagesAvealpha () :
imagesavealpha($image, true);
Lorsque vous appelez cette fonction, la bibliothèque GD conserve les données du canal alpha lors de la sortie de PNG (ou d'autres formats qui prennent en charge la transparence). S'il n'est pas activé, GD remplira la zone transparente par défaut avec un fond sans alpha (généralement noir ou blanc), provoquant la couleur transparente que vous avez allouée à l'échec, et l'image enregistrée semble complètement opaque.
autrement dit:
? ImageColorallocatEalpha () → Définir la partie transparente de la couleur
?? Mais il ne conserve pas automatiquement des informations transparentes dans le fichier → Besoin d'appeler manuellement ImagesVealpha ()
Jetons un coup d'œil à un exemple simple:
<?php
// Créer une toile
$image = imagecreatetruecolor(200, 200);
// Ouvrir alpha Économie de canal
imagesavealpha($image, true);
// 创建一个Complètement transparent的背景色
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
// Remplir l'arrière-plan
imagefill($image, 0, 0, $transparent);
// 画一个半透明的rouge矩形
$red = imagecolorallocatealpha($image, 255, 0, 0, 63);
imagefilledrectangle($image, 50, 50, 150, 150, $red);
// Image de sortie
header('Content-Type: image/png');
imagepng($image);
// Mémoire libre
imagedestroy($image);
?>
Si vous supprimez la ligne ImagesVealpha ($ Image, True) , la zone transparente du fichier PNG enregistré sera directement perdue, et il ressemble à un rectangle rouge avec un fond noir.
Si vous souhaitez enregistrer l'image en tant que fichier au lieu de le sortir au navigateur, vous pouvez le faire: