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

Php GD2-复制两个透明图像会产生黑色背景,php,png,transparent,gd2,Php,Png,Transparent,Gd2,这真让我大吃一惊。我想合并2个透明PNG 一个是从正方形图像动态生成的圆($source)。 第二个是一个地图标记($marker),后面有一个透明的圆圈以适应第一个标记 imagepng($来源);和图像标记;正如人们所期望的那样。 有透明的背景 然后,我创建一个空的透明图像,大小与标记相同,以将它们放在一起: //NEW BLANK TRANSPARENT IMAGE $dest = imagecreatetruecolor(50, 61); $transparent = imagecolo

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

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

imagepng($来源);和图像标记;正如人们所期望的那样。 有透明的背景

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

//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在合并前的结果保持透明?

这里的问题是:

为了在运行中生成圆形,我创建了一个圆形遮罩,并使其他所有内容透明,使其为红色,然后使红色透明。 这与imagesavealpha(true)不兼容,因为它表示gd引擎完全忽略透明颜色,而保存整个alpha通道

合并两个图像时,一度透明的颜色现在为黑色


我的解决方案是逐像素分析它,如果它在圆内,则使用圆方程将其复制到空白图像。

我刚刚用两个透明图像尝试了你的代码,它对我有效。尝试使用
imagecolortransparent($dest,$blackColor)?就这么做了。尽管它可能与照片中的其他黑人发生冲突。仍然不起作用。这里的问题是圆圈掩码。它自己可以很好地工作,但是当复制到另一个图像上时,它会添加一个黑色背景。