0

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

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

imagepng($source); 和 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 在合并之前保持透明?

4

1 回答 1

0

这里的问题是:

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

合并两个图像时,曾经透明的颜色现在是黑色。

我的情况的解决方案是对每个像素的像素进行分析,如果它在圆圈内,则使用循环方程将其复制到空白图像。

于 2013-03-30T20:22:56.957 回答