Dans la bibliothèque de traitement d'image de PHP GD, ImageCopymerge () est une fonction commune qui combine une image sur une autre image et permet la transparence de la fusion (en fait le "niveau de mélange" de la fusion). Mais si vous souhaitez contrôler la transparence plus finement, comme utiliser de vrais canaux alpha (plutôt que de simples ajustements d'opacité), vous devez l'utiliser avec ImageColorAllocatEalpha () .
Cet article présentera comment utiliser l'imageColorallocatEalpha () pour définir les couleurs avec des canaux alpha (transparence), et combiner l'imagecopymerge () pour réaliser la fusion de couche avec des effets transparents.
ImageColorallocatEalpha (Resource $ image, int $ red, int $ vert, int $ bleu, int $ alpha)
Utilisé pour attribuer une couleur avec un canal alpha à l'image spécifiée. La valeur de $ alpha est de 0 (complètement opaque) à 127 (complètement transparente).
ImageCoPymerge (Resource $ dst_im, ressource $ src_im, int $ dst_x, int $ dst_y, int $ src_x, int $ src_y, int $ src_w, int $ src_h, int $ pct)
Copiez l'image $ src_im sur $ dst_im et définissez le degré de mélange avec $ pct (0 = complètement transparent, 100 = complètement opaque).
Il convient de noter que l'imagecopymerge () ne prend pas en charge le mélange de canaux alpha réel, il simule simplement les effets transparents en ajustant la luminosité des pixels. Si une fusion translucide plus fine est nécessaire, vous pouvez utiliser ImageCopy () et remplir la zone transparente avec ImageColorAllocatEalpha () dans l'image source.
Voici un exemple complet montrant comment créer une couche d'arrière-plan transparent et la fusionner sur l'image principale.
<?php
// Créer l'image principale(arrière-plan)
$background = imagecreatetruecolor(400, 300);
$white = imagecolorallocate($background, 255, 255, 255);
imagefilledrectangle($background, 0, 0, 400, 300, $white);
// Créer des couches transparentes
$layer = imagecreatetruecolor(200, 150);
imagesavealpha($layer, true);
$transparent = imagecolorallocatealpha($layer, 0, 0, 0, 127); // Complètement transparent
imagefill($layer, 0, 0, $transparent);
// Dessinez un rectangle rouge translucide sur la couche
$red_alpha = imagecolorallocatealpha($layer, 255, 0, 0, 63); // translucide
imagefilledrectangle($layer, 20, 20, 180, 130, $red_alpha);
// Fusionner le calque à l'image principale(Avis imagecopymerge Non pris en charge alpha allée)
imagecopy($background, $layer, 100, 75, 0, 0, 200, 150);
// Résultat de sortie
header('Content-Type: image/png');
imagepng($background);
// Nettoyez la mémoire
imagedestroy($background);
imagedestroy($layer);
?>
ImageCreateTrueColor () est utilisé pour créer une vraie toile de couleur.
ImagesVealpha () ouvre l'indicateur pour enregistrer le canal alpha pour s'assurer que les informations transparentes ne sont pas perdues.
ImageColorAllocatEalpha () définit une couleur avec la transparence, où nous l'utilisons pour créer un fond complètement transparent et un rouge translucide.
ImageCopy () au lieu d' imagecopymerge () est utilisé pour préserver le canal alpha. Si vous utilisez ImageCopymerge () , la bibliothèque GD force le mélange alpha pour fermer, en utilisant uniquement $ PCT pour simuler la transparence.
Enfin, utilisez ImagePng () pour sortir l'image générée.