减去两个图像以留下结果 - PHP

时间:2016-02-04 16:31:33

标签: php image image-processing imagick

我有两个图像(两个图)一个是普通地图,一个是带有图钉的地图。

图片一

Image One

图片二

Image Two

我试图将它们相互减去,所以我只留下了引脚作为透明png。

我已经取得了一些成功,并设法将引脚作为自己的图像,问题是颜色不是很正确(见图3)。

图片三

Image Three

我使用Imagick执行此操作,我的代码位于

之下
<?php

// load in the base image into Imagick
$imageOne = new Imagick('images/base-map.png');
$imageTwo = new Imagick('images/pins/location-7.png');

$imageOne->compositeImage($imageTwo, Imagick::COMPOSITE_DIFFERENCE, 0, 0);
$imageOne->paintTransparentImage($imageOne->getImagePixelColor(0, 0), 0, 5000);

header('Content-Type: image/png');

echo $imageOne;

有谁知道如何整理/调整它以使颜色与原始图像匹配?

谢谢!

3 个答案:

答案 0 :(得分:1)

你也会从引脚中减去,这就是它们看起来不同的原因。

我不确定如何在Imagick中执行此操作,但您想要做的是:

使用Pins从地图中减去地图,创建一个掩码(将引脚像素1,以前的地图像素为0),然后将其与带引脚的地图相乘。 然后你留下了别针。

这可能会有所帮助: http://www.imagemagick.org/script/fx.php

答案 1 :(得分:1)

您需要为此创建一个掩码,其中所有引脚都是透明的。这里更详细......

http://www.imagemagick.org/discourse-server/viewtopic.php?t=16279 http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=15584&start=0

答案 2 :(得分:1)

我已经设法使用Piglet和游荡战士提到的掩蔽技术并在此post的帮助下使用

如果其他人需要它,代码就在这里:

<?php

$base = new Imagick('images/base-map.png'); // blank map
$mask = $base; // copy of this to create the mask with
$imageTwo = new Imagick('images/pins/location-7.png'); // image with pins on it

// create the mask
$mask->compositeImage($imageTwo, Imagick::COMPOSITE_DIFFERENCE, 0, 0);
$mask->paintTransparentImage($mask->getImagePixelColor(0, 0), 0, 5000);
$mask->compositeImage($mask, Imagick::COMPOSITE_DIFFERENCE, 0, 0);

// remove the mask from the image with pins
$imageTwo->compositeImage($mask, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA);
$imageTwo->paintTransparentImage('#000', 0, 5000);

header('Content-Type: image/png');
echo $imageTwo;

掩码看起来像mask

和最终输出如此

enter image description here

希望这可以帮助其他需要它的人!