我有两个图像(两个图)一个是普通地图,一个是带有图钉的地图。
图片一
图片二
我试图将它们相互减去,所以我只留下了引脚作为透明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;
有谁知道如何整理/调整它以使颜色与原始图像匹配?
谢谢!
答案 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;
和最终输出如此
希望这可以帮助其他需要它的人!