Start · Sprachen · PHP · Referenz · imagecopymerge

imagecopymerge

Funktion

Kopiert einen rechteckigen Bereich aus einem Quellbild in ein Zielbild und mischt beide Bilder mit einem angebbaren Transparenzgrad.

seit PHP 4.0.6 Kategorie: image

Signatur

imagecopymerge(GdImage $dst_image, GdImage $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_width, int $src_height, int $pct): bool

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

Typ
bool
Beschreibung
Gibt 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);
?>
Überblendung gespeichert.

// 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.