我正在努力从另外两个创建一个PNG图像。
图像A和B具有相同的尺寸,它们都是200x400px。最终的图像一样。
我正在使用带有PHP的GD库。
所以我的想法是从我原来的PNG-8创建一个PNG-24,然后使用颜色透明度,最后将第二个图像复制到 这款新的PNG-24。无论如何,当从PNG-24转到PNG-8并且颜色透明时,问题出现在第一步:
这是为了获得原始的PNG-8及其尺寸:
$png8 = imagecreatefrompng($imageUrl);
$size = getimagesize($imageUrl);
现在我创建一个新的PNG并用绿色填充它的背景(图像中没有):
$png24 = imagecreatetruecolor($size[0], $size[1]);
$transparentIndex = imagecolorallocate($png24, 0x66, 0xff, 0x66);
imagefill($png24, 0, 0, $transparentIndex);
这是为了使绿色透明:
imagecolortransparent($png24, $transparentIndex);
然后我将png8复制到PNG-24中:
imagecopy($png24, $png8, 0, 0, 0, 0, $size[0], $size[1]);
所以这就是问题:原始PNG-8看起来不错,但原始图像中的形状周围有绿色边框。真的难以解释。似乎绿色背景的某些部分留在剩余的PNG中。
我该怎么办?
提前致谢
最好的问候,
费尔南多
答案 0 :(得分:1)
我之前有一些png透明度问题,并且能够用这种模式解决它们:
// allocate original image to copy stuff to
$img = imagecreatetruecolor(200, 100);
// create second image
$bg = imagecreatefrompng('bg.png');
// copy image onto it using imagecopyresampled
imagecopyresampled($img, $bg, 0, 0, 0, 0, 200, 100, 200, 100);
imagedestroy($bg);
// create third image
// do same routine
$fg = imagecreatefrompng('fg.png');
imagecopyresampled($img, $fg, 50, 50, 0, 0, 50, 50, 50, 50);
imagedestroy($fg);
// output image
imagepng($img);
imagedestroy($img);
我认为我和你的唯一区别是imagecopy()
与imagecopyresampled()
。我似乎记得有这个问题,虽然它已经有一段时间了。你可以在这里看到我使用这种模式的图像示例:http://www.ipnow.org/images/1/bggrad/bg4/yes/TRANSIST.TTF/8B0000/custombrowserimage.jpg(我分配一个空白图像,复制背景图像,复制透明度的叠加层)