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

Subtract two images to leave result - PHP

我有两张图片(都是地图),一张是普通地图,一张是有图钉的地图。

图一

图二

我试图将它们相互减去,所以我只剩下透明 png 的图钉。

我在这方面取得了一些成功,并设法将图钉作为自己的图像,问题是颜色不太正确(见图 3)。

图三

我正在使用 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;

有谁知道我如何tidy/tweak使颜色与原始图像匹配?

谢谢!

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

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

从带有图钉的地图中减去地图,创建一个遮罩(将图钉像素设为 1,之前的地图像素设为 0),然后将其与带有图钉的地图相乘。 然后你就剩下别针了。

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

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

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

我已经设法使用 Piglet 和 wandering-warrior 提到的掩蔽技术并在此 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;

面具看起来像这样

最后的输出是这样的

希望这对需要它的其他人有所帮助!