PHP GD覆盖JPG上的透明PNG

问题描述:

我想用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); 

我的输出图像看起来就像没有框架的中间图像。任何人都可以发现任何明显的我做错了吗?

你应该仔细看看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