PHP GD 在 JPG 之上叠加透明 PNG

PHP GD Overlay transparent PNG on top of JPG

我正在尝试使用 PHP GD 将帧叠加到图像上。这是我的源图像示例以及我想要实现的目标...

框架图像是透明的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);