我需要合并以下图片,但我的解决方案无效。
我的代码如下(我通过GET参数将图像的URL传递给脚本)
<?php
$dest = imagecreatefrompng($_GET['img1']);
$src = imagecreatefrompng($_GET['img2']);
imagecopymerge($dest, $src, 0, 0, 0, 0, 1500, 1500, 50);
$white = imagecolorallocate($dest, 255, 255, 255);
imagecolortransparent($dest, $white);
header('Content-Type: image/png');
imagepng($dest);
?>
两张图片均为PNG,背景透明,均为1500x1500。
第一张图片:
第二张图片:
为什么我不能让最终图像具有正确的不透明度?我尝试将imagecopymerge()
的最后一个值更改为0或100但在这些情况下我只获得一个或另一个图像。我需要它们两个,彼此完全重叠!
另外,如果仔细观察最终图像中的宝石,会有一些额外的蓝色......这怎么可能?
答案 0 :(得分:0)
这是因为通过调用imagecolortransparent
将结果图像设置为使用图像透明度而非每像素Alpha通道透明度,这会将任何白色(#ffffff
)像素设置为100%透明。
结果图像上的人工制品(“额外的蓝色”和边缘像素)是由未保存的原始图像的alpha通道透明度和显示其原始图像的像素(100%透明但不是白色)引起的颜色。
结果的“褪色”外观来自告诉imagecopymerge
将两张图片合并为50%的透明度。
解决方案是使用正确的alpha设置:
<?php
$dest = imagecreatefrompng($_GET['img1']);
$src = imagecreatefrompng($_GET['img2']);
imagesavealpha($dest, true);
imagecopy($dest, $src, 0, 0, 0, 0, 1500, 1500);
header('Content-Type: image/png');
imagepng($dest);