2017-08-25 10 views
0

Ich versuche PHP GD zu verwenden, um einen Frame auf ein Bild zu überlagern. Hier ist ein Beispiel für meine Quellbilder und was ich versuche zu erreichen ...PHP GD Overlay transparent PNG über JPG

Das Rahmenbild ist eine transparente png, mein Code wie folgt aussieht ...

$dest = imagecreatefromjpeg('image.jpg'); 
$src = imagecreatefrompng('frame.png'); 

imagecopymerge($dest, $src, 0, 0, 0, 0, 300, 300, 50); 

header('Content-Type: image/jpeg'); 

imagejpeg($dest, 'output.jpg'); 

imagedestroy($dest); 
imagedestroy($src); 

Mein Ausgabebild sieht genauso aus wie das mittlere Bild ohne Rahmen. Kann irgendjemand etwas erkennen, das offensichtlich ist, mache ich falsch?

Antwort

1

Sie sollten sich die Dokumentation von imagecopymerge() genauer ansehen. imagecopymerge() erwartet genau 9 Parameter, 10 sind in Ihrem Skript angegeben.

Bearbeiten: imagecopymerge() kann Alpha-Kanäle nicht selbst behandeln. Sie müssen einige zusätzliche Codezeilen hinzufügen. Hier ist, wie es aussehen sollte:

$src = imagecreatefromjpeg('image.jpg'); 
$dest = imagecreatefrompng('frame.png'); 

imagealphablending($dest, false); 
imagesavealpha($dest, true); 
imagealphablending($src, false); 
imagesavealpha($src, true); 

$insert_x = imagesx($src); 
$insert_y = imagesy($src); 

$white = imagecolorallocatealpha($dest, 255, 255, 255, 127); 
imagecolortransparent($dest, $white); 
imagecopymerge($src, $dest, 0, 0, 0, 0, $insert_x, $insert_y, 100); 

header('Content-Type: image/jpeg'); 
imagejpeg($src); 

imagedestroy($dest); 
imagedestroy($src); 
+0

Haben die Original-Beitrag geändert, aber immer noch die gleiche Leistung erhalten – fightstarr20

+0

@ fightstarr20 Achten Sie auf die Linie header (‚Content-Type: image/jpeg‘) zu entfernen; wenn Sie die Datei mit imagejpeg speichern möchten ($ src, 'output.jpg'); –

+0

Danke zur Klarstellung – fightstarr20