2017-08-25 120 views
0

我想用PHP GD將一幀圖像覆蓋到圖像上。這是我的源圖像和我想實現的一個例子...PHP GD覆蓋JPG上的透明PNG

幀圖像是一個透明的PNG,我的代碼看起來像這樣...

$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); 

我的輸出圖像看起來就像沒有框架的中間圖像。任何人都可以發現任何明顯的我做錯了嗎?

回答

1

你應該仔細看看imagecopymerge()的文檔。 imagecopymerge()只需要9個參數,10個在你的腳本中給出。

編輯: imagecopymerge()不能處理alpha通道本身。你必須添加一些額外的代碼行。下面是它應該是什麼樣子:

$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

已經修改了原來的職務,但仍然得到同樣的輸出 – fightstarr20

+0

@ fightstarr20確保刪除行頭(「內容類型:圖像/ JPEG」);如果你想用imagejpeg($ src,'output.jpg')保存文件; –

+0

感謝您的澄清 – fightstarr20