Dans la bibliothèque GD de PHP, la fonction ImageColOrTransparent est utilisée pour définir des couleurs transparentes pour une image. Sa fonction de base est de spécifier une couleur dans l'image en tant que couleur transparente, afin que tous les pixels de cette couleur soient affichés comme transparents. Cependant, dans le développement réel, de nombreuses personnes constatent que si vous souhaitez définir avec précision les zones transparentes dans l'image, en particulier les couleurs complexes ou les zones de gradient, appelant directement ImageColOrtransparent ne peut pas réaliser l'effet idéal. Cet article présentera en détail comment utiliser ImageColOrTransparent pour définir avec précision les zones transparentes et donner quelques conseils et exemples pratiques.
<?php
// Créer un100x100True Image couleur
$image = imagecreatetruecolor(100, 100);
// Remplissez un fond rouge pour l'image
$red = imagecolorallocate($image, 255, 0, 0);
imagefill($image, 0, 0, $red);
// Réglez le rouge sur une couleur transparente
imagecolortransparent($image, $red);
// Image de sortie
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
Dans le code ci-dessus, ImageColOrTransparent spécifie que Red $ Red est transparent, de sorte que la pièce rouge sera affichée comme transparente dans l'image PNG de sortie.
ImageColOrTransparent ne peut définir qu'une seule couleur pour être transparente, cette couleur est la valeur d'indice de couleur obtenue via ImageColorAllocat ou ImageColorat . Le problème est:
Une seule couleur peut être transparente, mais pas de gradient ou de transparence multicolore.
Si l'image est une vraie couleur (créée par ImageCreateTrueColor ), le paramètre de couleur transparent se convertira automatiquement en mode palette, ce qui peut provoquer une distorsion des couleurs.
La correspondance des couleurs doit être complètement cohérente et de légères déviations dans la couleur entraîneront une défaillance de transparence.
Convertissez d'abord l'image de couleur vraie en une image de palette ( ImageTrueColortOpalette ), puis définissez la couleur transparente.
<?php
$image = imagecreatetruecolor(100, 100);
// Dessiner un rectangle vert
$green = imagecolorallocate($image, 0, 255, 0);
imagefill($image, 0, 0, $green);
// Convertir en image de palette,Le plus populaire256Type de couleurs
imagetruecolortopalette($image, false, 256);
// Trouver l'indice de couleur qui doit être transparent
$transparentIndex = imagecolorclosest($image, 0, 255, 0);
// Définir la couleur transparente
imagecolortransparent($image, $transparentIndex);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
Notez que cette approche convient aux images avec moins de couleurs et de couleurs fixes, et les couleurs peuvent perdre des détails après la conversion en palette.
Pour les images de vraies couleurs, il est recommandé d'utiliser des images PNG avec des canaux alpha et des images de fonction ImagesVealpha pour définir la transparence au niveau du pixel.
<?php
$image = imagecreatetruecolor(100, 100);
// Activer alpha Économie de canal
imagesavealpha($image, true);
// Dessiner un fond bleu translucide
$transBlue = imagecolorallocatealpha($image, 0, 0, 255, 80);
imagefill($image, 0, 0, $transBlue);
// Dessinez un cercle blanc opaque
$white = imagecolorallocatealpha($image, 255, 255, 255, 0);
imagefilledellipse($image, 50, 50, 80, 80, $white);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
Cette méthode est plus flexible, prend en charge les effets de gradient et translucide, adaptés aux besoins complexes et transparents.
Supposons que vous ayez une image et que vous souhaitiez définir les pixels dans une certaine plage de couleurs pour être transparent, vous pouvez utiliser des pixels pour juger en combinaison avec la couleur:
<?php
$image = imagecreatefrompng('http://m66.net/sample.png');
// Obtenez la largeur et la hauteur de l'image
$width = imagesx($image);
$height = imagesy($image);
// Définissez la gamme de couleurs à transparent(Comme près du blanc)
$threshold = 30;
for ($x = 0; $x < $width; $x++) {
for ($y = 0; $y < $height; $y++) {
$rgb = imagecolorat($image, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
// Déterminez s'il est proche du blanc
if ($r > 255 - $threshold && $g > 255 - $threshold && $b > 255 - $threshold) {
// Définissez ce pixel pour être complètement transparent
imagesetpixel($image, $x, $y, imagecolorallocatealpha($image, 0, 0, 0, 127));
}
}
}
// réserve alpha Informations sur les canaux
imagesavealpha($image, true);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
En traversant les pixels, vous pouvez contrôler plus précisément les zones transparentes, adaptées au traitement complexe de transparence des images.
ImageColOrTransparent convient pour définir une seule couleur transparente, mais la portée de l'application est limitée.
Les vraies images couleur peuvent être combinées avec ImageColOrTransparent à l'aide du mode Palette, mais perdront la couleur.
Il est recommandé d'utiliser des images PNG avec un canal alpha et de réaliser des détails et transparents via ImagesAvealpha et ImageColorAllocatEalpha .
Les exigences de transparence complexes peuvent être contrôlées avec précision grâce à la traversée des pixels et au jugement des couleurs.
En maîtrisant les compétences ci-dessus, vous pouvez utiliser la bibliothèque PHP GD PHP pour définir avec précision les zones d'image transparentes pour répondre à une variété de besoins de développement.