Start · Sprachen · PHP · Referenz · imagelayereffect

imagelayereffect

Funktion

Setzt das Alpha-Blending-Flag für Layer-Effekte auf einem GD-Bild-Objekt, um verschiedene Kompositions-Modi für Pixel-Operationen zu aktivieren.

seit PHP 4.3.0 Kategorie: image

Signatur

imagelayereffect(GdImage $image, int $effect): bool

Beschreibung

imagelayereffect() ermöglicht es, den Alpha-Blending-Modus für Layer-Effekte auf einem GD-Bildobjekt zu steuern. Die Funktion setzt intern das sogenannte Layer-Effect-Flag, das bestimmt, wie neue Pixel mit dem bestehenden Bildinhalt kombiniert werden.

Die Funktion akzeptiert als zweiten Parameter eine der vordefinierten GD-Konstanten, zum Beispiel IMG_EFFECT_REPLACE, IMG_EFFECT_ALPHABLEND, IMG_EFFECT_NORMAL, IMG_EFFECT_OVERLAY oder IMG_EFFECT_MULTIPLY. Je nach gewähltem Modus werden Pixel unterschiedlich über den vorhandenen Bildinhalt gelegt.

Typische Anwendungsfälle sind das Überlagern von Bildebenen mit Transparenz, das Erstellen von Wasserzeichen, das Anwenden von Überblendungseffekten oder das Zusammensetzen von Grafiken aus mehreren Schichten. In Verbindung mit imagecopy() oder direkten Zeichenfunktionen lassen sich damit komplexe Bildkompositionen realisieren.

Zu beachten ist, dass diese Funktion ausschließlich für Truecolor-Bilder sinnvoll ist und mit palettenbasierten Bildern nicht korrekt arbeitet. Nach der Verwendung sollte der Effekt ggf. wieder zurückgesetzt werden, um unerwünschte Seiteneffekte auf spätere Zeichenoperationen zu vermeiden.

Parameter

Name Typ Default Beschreibung
$image Pflicht GdImage Ein gültiges GD-Bildobjekt (seit PHP 8.0 vom Typ GdImage), typischerweise erstellt mit imagecreatetruecolor() oder ähnlichen Funktionen.
$effect Pflicht int Einer der vordefinierten Layer-Effekt-Konstanten: IMG_EFFECT_REPLACE, IMG_EFFECT_ALPHABLEND, IMG_EFFECT_NORMAL, IMG_EFFECT_OVERLAY oder IMG_EFFECT_MULTIPLY.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. wenn das übergebene Bild kein gültiges GD-Objekt ist oder die Konstante ungültig ist).

Beispiele

Overlay-Effekt auf ein Bild anwenden

<?php
// Basisebene: weißer Hintergrund
$base = imagecreatetruecolor(200, 200);
$white = imagecolorallocate($base, 255, 255, 255);
imagefill($base, 0, 0, $white);

// Roten Kreis auf Basisebene zeichnen
$red = imagecolorallocate($base, 255, 0, 0);
imagefilledellipse($base, 100, 100, 120, 120, $red);

// Zweite Ebene mit blauem Rechteck
$overlay = imagecreatetruecolor(200, 200);
imagealphablending($overlay, false);
$blue = imagecolorallocatealpha($overlay, 0, 0, 255, 64); // halbtransparent
imagefilledrectangle($overlay, 50, 50, 150, 150, $blue);

// Layer-Effekt: Alpha-Blending für Overlay aktivieren
imagelayereffect($base, IMG_EFFECT_OVERLAY);
imagecopy($base, $overlay, 0, 0, 0, 0, 200, 200);

// Ergebnis als PNG ausgeben
header('Content-Type: image/png');
imagepng($base);
imagedestroy($base);
imagedestroy($overlay);
?>

Multiply-Effekt für Wasserzeichen-Komposition

<?php
// Quellbild laden (z. B. ein Foto)
$photo = imagecreatefromjpeg('foto.jpg');

// Wasserzeichen-Ebene erstellen
$watermark = imagecreatetruecolor(imagesx($photo), imagesy($photo));
imagealphablending($watermark, false);
$gray = imagecolorallocatealpha($watermark, 128, 128, 128, 80);
imagefilledrectangle($watermark, 0, 0, imagesx($watermark), imagesy($watermark), $gray);

$text_color = imagecolorallocatealpha($watermark, 255, 255, 255, 20);
imagestring($watermark, 5, 10, 10, 'Mein Wasserzeichen', $text_color);

// Multiply-Blending-Modus setzen
imagelayereffect($photo, IMG_EFFECT_MULTIPLY);
imagecopy($photo, $watermark, 0, 0, 0, 0, imagesx($photo), imagesy($photo));

// Blending zurücksetzen
imagelayereffect($photo, IMG_EFFECT_REPLACE);

header('Content-Type: image/jpeg');
imagejpeg($photo, null, 90);
imagedestroy($photo);
imagedestroy($watermark);
?>

// Wichtig · Fallstricke

Nur für Truecolor-Bilder: imagelayereffect() ist ausschließlich für mit imagecreatetruecolor() erstellte Bilder gedacht. Bei palettenbasierten Bildern (erstellt mit imagecreate()) ist das Verhalten undefiniert oder führt zu fehlerhaften Ergebnissen.

Reihenfolge beachten: Der gesetzte Layer-Effekt gilt für alle nachfolgenden Zeichenoperationen auf dem Bild. Es empfiehlt sich, nach dem gewünschten Effekt den Modus mit IMG_EFFECT_REPLACE oder IMG_EFFECT_ALPHABLEND wieder auf den Standard zurückzusetzen, um ungewollte Seiteneffekte zu vermeiden.

Eingeschränkte Unterstützung: Nicht alle GD-Versionen und PHP-Builds unterstützen alle Effekt-Konstanten gleichermaßen. Bei älteren Installationen kann es vorkommen, dass bestimmte Konstanten nicht definiert sind. Ein Vorab-Check mit defined('IMG_EFFECT_MULTIPLY') ist empfehlenswert.