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);
我正在尝试使用 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);