Lorsque vous effectuez un traitement d'image dans PHP, l'imageColorAllocatealPha () est une fonction très importante. Il attribue non seulement des couleurs, mais contrôle également la transparence. Cependant, de nombreux développeurs rencontrent des problèmes de transparence d'image anormaux lors de l'utilisation, souvent à cause de la bonne.
Cet article analysera ce problème en détail pour vous aider à utiliser correctement la fonction ImageColorallocatealPha () .
ImageColorAllocatEalPha () est utilisé pour attribuer des couleurs avec transparence aux images basées sur la bibliothèque GD.
Sa syntaxe de base est la suivante:
int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )
Description du paramètre:
$ Image : une ressource d'image créée par ImageCreate () ou ImageCreateTrueColor () .
$ rouge , $ vert , $ bleu : composants de couleur RVB, gamme 0–255.
$ alpha : valeur de transparence, plage 0–127 .
Remarque: Alpha n'est pas 0–255, mais 0 (complètement opaque) à 127 (complètement transparent) .
La première erreur que de nombreux développeurs font est: ils pensent que la valeur de l'alpha est de 0 à 255 comme RVB, mais ils y font directement 255.
Jetons un coup d'œil à un exemple:
<?php
$img = imagecreatetruecolor(200, 200);
$color = imagecolorallocatealpha($img, 255, 0, 0, 255); // erreur
L'ensemble alpha ici est de 255, tandis que la bibliothèque GD n'accepte que jusqu'à 127. Parce qu'elle est hors de portée, GD le traitera comme 127, ce qui entraîne une transparence complète.
Écriture correcte:
<?php
$img = imagecreatetruecolor(200, 200);
$color = imagecolorallocatealpha($img, 255, 0, 0, 0); // Opacité rouge
$semi_transparent = imagecolorallocatealpha($img, 255, 0, 0, 64); // Rouge translucide
Parce que la bibliothèque GD comprend la valeur alpha de cette manière:
0: totalement opaque
127: complètement transparent
Si vous remplissez 255, GD utilisera Min ($ alpha, 127) , ce qui signifie qu'il sera considéré comme la transparence maximale. Cela mène à:
Je voulais à l'origine dessiner du rouge, mais je ne pouvais pas le voir.
Je voulais à l'origine dessiner translucide, mais il s'est avéré être complètement transparent.
? N'oubliez pas: la plage alpha est de 0 à 127, pas 0–255.
Si vous utilisez des conceptions de transparence dans la gamme 0 à 255 (comme les valeurs communes CSS ou RGBA), vous devez effectuer une conversion:
$css_alpha = 128; // Supposant 0–255 exprimer
$gd_alpha = intval(127 * (255 - $css_alpha) / 255); // Se convertir GD Valeur usagée
Cela garantira que vous avez une transparence cohérente dans PHP.
Saisissons-les avec un exemple complet: