GD2 - 复制两个透明图像会产生黑色背景

时间:2013-03-29 18:10:23

标签: php png transparent gd2

这让我大吃一惊。我想合并2个透明的PNG。

一个是从正方形图像中动态生成的圆($ source)。 第二个是地图标记($ marker),带有透明圆圈以适合第一个背后。

imagepng($源);和imagepng($ marker);输出就像人们预期的那样。 透明背景。

然后我创建一个与标记大小相同的空透明图像,将它们放在一起:

//NEW BLANK TRANSPARENT IMAGE
$dest = imagecreatetruecolor(50, 61);
$transparent = imagecolorallocatealpha($dest, 0, 0, 0, 127);
imagefill($dest, 0, 0, $transparent);
imagealphablending($dest, true);
imagesavealpha($dest,true);

//COPY THE CIRCLE       
imagecopy($dest, $source, 5, 5, 0, 0, 41, 41);

//AND THE MARKER ON TOP
imagecopy($dest, $marker, 0, 0, 0, 0, 50, 61);

在结果中,圆圈显示为黑色正方形,圆圈在里面。 我在$ source和$ dest上尝试了很多imagealphablending和imagesavealpha的组合,似乎没什么用。

如何删除黑色正方形并使$ source在合并前的结果中保持透明?

1 个答案:

答案 0 :(得分:0)

这里的问题是:

要动态生成圆圈,我正在创建一个圆形蒙版,让其他所有内容都透明,使其变红,然后使其变为透明。 这与imagesavealpha(true)不兼容,因为它说gd引擎完全忽略透明颜色并保存整个alpha通道。

合并两个图像时,一旦透明的颜色现在变黑。

我的案例的解决方案是将每个像素的像素分析并使用圆形方程将其复制到空白图像(如果它在圆圈内)。