In der GD der PHP -Bildverarbeitungsbibliothek von PHP () ist imageCopyMerge () eine gemeinsame Funktion, die ein Bild auf einem anderen Bild kombiniert und die Transparenz der Zusammenführung ermöglicht (tatsächlich die "Mischung" der Zusammenführung). Wenn Sie jedoch die Transparenz fein steuern möchten, z. B. die Verwendung realer Alpha -Kanäle (anstatt nur einfache Opazitätsanpassungen), müssen Sie sie mit ImageColorallocatealpha () verwenden.
In diesem Artikel wird vorgestellt, wie man imageColorallocatealpha () die Farben mit Alpha -Kanälen (Transparenz) definiert und ImageCopymerge () kombiniert, um eine Schichtverführung mit transparenten Effekten zu erreichen.
ImageColorallocatealpha (Ressource $ Image, int $ rot, int $ green, int $ blau, int $ alpha)
Wird verwendet, um dem angegebenen Bild eine Farbe mit einem Alpha -Kanal zuzuweisen. Der Wert von $ alpha beträgt 0 (vollständig undurchsichtig) bis 127 (vollständig transparent).
ImageCopyMerge (Ressource $ 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)
Kopieren Sie das Bild $ src_im auf $ dst_im und setzen Sie den Mischabschluss mit $ pct (0 = vollständig transparent, 100 = vollständig undurchsichtig).
Es ist zu beachten, dass ImageCopyMerge () das reale Alpha -Kanal -Mischen nicht unterstützt, sondern einfach transparente Effekte durch Anpassung der Pixelhelligkeit simuliert. Wenn eine feinere durchscheinende Zusammenführung benötigt wird, können Sie ImageCopy () verwenden und den transparenten Bereich mit ImageColorallocatealpha () im Quellbild füllen.
Hier finden Sie ein vollständiges Beispiel, das zeigt, wie Sie eine Ebene transparenter Hintergrunds erstellen und sie auf das Hauptbild verschmelzen.
<?php
// Erstellen Sie das Hauptbild(Hintergrund)
$background = imagecreatetruecolor(400, 300);
$white = imagecolorallocate($background, 255, 255, 255);
imagefilledrectangle($background, 0, 0, 400, 300, $white);
// Erstellen Sie transparente Schichten
$layer = imagecreatetruecolor(200, 150);
imagesavealpha($layer, true);
$transparent = imagecolorallocatealpha($layer, 0, 0, 0, 127); // Völlig transparent
imagefill($layer, 0, 0, $transparent);
// Zeichnen Sie ein durchscheinendes rotes Rechteck auf die Schicht
$red_alpha = imagecolorallocatealpha($layer, 255, 0, 0, 63); // durchscheinend
imagefilledrectangle($layer, 20, 20, 180, 130, $red_alpha);
// Führen Sie die Ebene mit dem Hauptbild zusammen(Beachten imagecopymerge Nicht unterstützt alpha Gang)
imagecopy($background, $layer, 100, 75, 0, 0, 200, 150);
// Ausgangsergebnis
header('Content-Type: image/png');
imagepng($background);
// Reinigen Sie den Speicher
imagedestroy($background);
imagedestroy($layer);
?>
ImagecrreatTueColor () wird verwendet, um eine echte Farbableinigung zu erstellen.
ImagesAvealpha () öffnet das Flag, um den Alpha -Kanal zu speichern, um sicherzustellen, dass transparente Informationen nicht verloren gehen.
ImageColorallocatealpha () definiert eine Farbe mit Transparenz, in der wir einen vollständig transparenten Hintergrund und ein durchscheinendes Rot erstellen.
ImageCopy () anstelle von ImageCopyMerge () wird verwendet, um den Alpha -Kanal zu erhalten. Wenn Sie imageCopyMerge () verwenden, zwingt die GD -Bibliothek das Alpha -Mischen zum Schließen mit nur $ PCT , um Transparenz zu simulieren.
Verwenden Sie schließlich ImagePng () , um das generierte Bild auszugeben.