Signatur
Beschreibung
imagecopymerge() überträgt einen Ausschnitt aus dem Quellbild $src_image auf das Zielbild $dst_image. Im Gegensatz zu imagecopy() ermöglicht diese Funktion eine prozentuale Überblendung beider Bilder: Der Parameter $pct steuert, wie stark der Quellausschnitt auf das Ziel einwirkt – von vollständig transparent (0) bis vollständig deckend (100).
Typische Anwendungsfälle sind das Einblenden von Wasserzeichen, das Überlagern von Logos oder das Erstellen von Blend-Effekten zwischen zwei Bildern. Bei $pct = 100 verhält sich die Funktion wie imagecopy(), bei $pct = 0 bleibt das Zielbild unverändert.
Die Funktion arbeitet pixelweise und berechnet für jeden Pixel die RGB-Werte als gewichtetes Mittel aus Quell- und Zielbild entsprechend dem angegebenen Prozentwert. Alphakanal-Informationen des Quellbildes werden dabei nicht berücksichtigt – für Transparenz-Compositing mit Alphakanal sollte stattdessen imagecopy() in Kombination mit imagealphablending() verwendet werden.
Die Koordinatenangaben $dst_x/$dst_y legen die Zielposition im Zielbild fest, während $src_x/$src_y den Startpunkt des Ausschnitts im Quellbild bestimmen. Breite und Höhe des kopierten Bereichs werden durch $src_width und $src_height definiert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $dst_image Pflicht | GdImage | Das Ziel-GD-Bildobjekt, in das der Ausschnitt eingefügt werden soll. | |
| $src_image Pflicht | GdImage | Das Quell-GD-Bildobjekt, aus dem der Ausschnitt kopiert wird. | |
| $dst_x Pflicht | int | X-Koordinate der Einfügeposition im Zielbild (in Pixeln, von links). | |
| $dst_y Pflicht | int | Y-Koordinate der Einfügeposition im Zielbild (in Pixeln, von oben). | |
| $src_x Pflicht | int | X-Startkoordinate des zu kopierenden Ausschnitts im Quellbild. | |
| $src_y Pflicht | int | Y-Startkoordinate des zu kopierenden Ausschnitts im Quellbild. | |
| $src_width Pflicht | int | Breite des zu kopierenden Bereichs aus dem Quellbild in Pixeln. | |
| $src_height Pflicht | int | Höhe des zu kopierenden Bereichs aus dem Quellbild in Pixeln. | |
| $pct Pflicht | int | Mischanteile des Quellbildes in Prozent. 0 = vollständig transparent (keine Änderung am Zielbild), 100 = vollständig deckend (entspricht imagecopy()). |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige Bildobjekte oder Koordinaten außerhalb der Grenzen).Beispiele
Halbtransparentes Wasserzeichen auf ein Bild legen
<?php
// Hintergrundbild laden
$hintergrund = imagecreatefromjpeg('foto.jpg');
// Wasserzeichen laden (z. B. ein PNG-Logo)
$wasserzeichen = imagecreatefrompng('logo.png');
$wm_breite = imagesx($wasserzeichen);
$wm_hoehe = imagesy($wasserzeichen);
$bg_breite = imagesx($hintergrund);
$bg_hoehe = imagesy($hintergrund);
// Wasserzeichen rechts unten positionieren (10 px Abstand)
$dst_x = $bg_breite - $wm_breite - 10;
$dst_y = $bg_hoehe - $wm_hoehe - 10;
// Wasserzeichen mit 50 % Deckkraft einmischen
imagecopymerge(
$hintergrund,
$wasserzeichen,
$dst_x, $dst_y, // Zielposition
0, 0, // Quellausschnitt ab (0,0)
$wm_breite, $wm_hoehe,
50 // 50 % Deckkraft
);
// Ergebnis ausgeben
header('Content-Type: image/jpeg');
imagejpeg($hintergrund, null, 90);
imagedestroy($hintergrund);
imagedestroy($wasserzeichen);
?>
Überblendung von zwei Bildern mit variablem Prozentsatz
<?php
// Zwei gleichgroße Bilder laden
$bild1 = imagecreatefromjpeg('sommer.jpg');
$bild2 = imagecreatefromjpeg('winter.jpg');
$breite = imagesx($bild1);
$hoehe = imagesy($bild1);
// Bild2 zu 70 % über Bild1 legen (Blend-Effekt)
imagecopymerge(
$bild1, // Ziel
$bild2, // Quelle
0, 0, // Zielposition: linke obere Ecke
0, 0, // Quellausschnitt: linke obere Ecke
$breite, $hoehe,
70 // 70 % Quellbild sichtbar
);
// Als PNG speichern
imagepng($bild1, 'ueberblendung.png');
echo 'Überblendung gespeichert.';
imagedestroy($bild1);
imagedestroy($bild2);
?>
// Wichtig · Fallstricke
Alphakanal-Hinweis: imagecopymerge() ignoriert Alphakanal-Informationen im Quellbild. Wenn das Quellbild (z. B. ein PNG mit Transparenz) korrekt über dem Zielbild dargestellt werden soll, empfiehlt sich stattdessen imagecopy() nach dem Aktivieren von imagealphablending($dst_image, true).
Leistung: Da die Funktion jeden Pixel einzeln verarbeitet, kann sie bei sehr großen Bildern vergleichsweise langsam sein. Für performante Compositing-Operationen auf großen Bildern sollte der verfügbare PHP-Arbeitsspeicher (memory_limit) ausreichend groß konfiguriert sein.
Koordinaten: Negative Koordinaten für $dst_x/$dst_y sind nicht zulässig und führen zu unerwartetem Verhalten. Prüfe vor dem Aufruf, ob Quell- und Zielrechtecke innerhalb der jeweiligen Bildgrenzen liegen.