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

woo*_*110 6 php image image-processing imagick

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

图一

图一

图像二

图像二

我试图将它们相互减去,所以我只留下了作为透明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;
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

woo*_*110 2

我已经设法使用 Piglet 和流浪战士提到的掩蔽技术并在这篇 文章的帮助下使其发挥作用

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

<?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;
Run Code Online (Sandbox Code Playgroud)

面具看起来像这样面具

最终输出如下

在此输入图像描述

希望这能帮助其他有需要的人!