如何将带有alpha通道的PNG图像合并成一个更大的图像?

3

我正在尝试将这些图层叠加:

gametile_masked_file gamertile_masked_file sanctum-background.png

变成这样:

alt text

但是我一直得到的是这个:

alt text

这是相关的代码,我不确定我错过了什么:

    $sig_background = imagecreatefrompng("sanctum-signature.png");
imagealphablending($sig_background, false);
imagesavealpha($sig_background, true);
$sig_gamertile = imagecreatefrompng($gamertile_masked_file);
imagealphablending($sig_gamertile, false);
imagesavealpha($sig_gamertile, true);
$sig_gametile = imagecreatefrompng($gametile_masked_file);
imagealphablending($sig_gamertile, false);
imagesavealpha($sig_gamertile, true);
imagecopymerge($sig_background, $sig_gamertile, 175, 2, 0, 0, 64, 64, 100);
imagecopymerge($sig_background, $sig_gametile, 342, 20, 0, 0, 64, 64, 100);

如果还有任何信息缺失,请告诉我,我会尽力填补。谢谢您的时间。
编辑 - 这里是文件链接(托管在photobucket上) 游戏图标 游戏图标

顺便说一句,在最后一个截图中,游戏瓷砖和玩家瓷砖的渲染看起来好像你的遮罩没有正确应用在源PNG上。你能否发布一些源图像的链接? - Ben
2个回答

0

这行代码:

imagealphablending($im, false);

禁用 alpha 混合。请使用 true 而不是 false


0

你的代码中有一个拼写错误,是复制/粘贴错误还是真正的漏洞?

你做:

$sig_gamertile = imagecreatefrompng($gamertile_masked_file);
imagealphablending($sig_gamertile, false);
imagesavealpha($sig_gamertile, true);

然后:

$sig_gametile = imagecreatefrompng($gametile_masked_file);

但是紧接着,您继续在$sig_gamertile上调用函数,而不是$sig_gametile

imagealphablending($sig_gamertile, false);
imagesavealpha($sig_gamertile, true);

显然,彻底更改一些变量的名称将有助于防止这种情况发生。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接