用Imagick比较两张图片后删除背景

时间:2014-11-25 13:10:13

标签: php imagemagick imagick

我是用php创建imagick的新手,我有一个问题: 我正在使用compareImages()函数比较两个图像。我使用的代码与documentation page中的代码相同:

<?php

$image1 = new imagick("image1.png");
$image2 = new imagick("image2.png");

$result = $image1->compareImages($image2, Imagick::METRIC_MEANSQUAREERROR);
$result[0]->setImageFormat("png");

header("Content-Type: image/png");
echo $result[0];

?>

此代码工作正常,但结果图片的背景与原始图像有点不透明。

我一直在搜索,但我发现了我想要的结果,但是使用了imagemagick命令: http://www.imagemagick.org/Usage/compare/

我当前的结果就像第一个命令的图像(“比较bag_frame1.gif bag_frame2.gif compare.gif”),我想要一个如此命令所示的结果:

 compare bag_frame1.gif bag_frame2.gif \
      -compose Src compare_src.gif

有没有办法用imagick的compareImages()函数做到这一点?

由于

1 个答案:

答案 0 :(得分:2)

在阅读第一张图片之前,您需要先使用Imagick::SetOption

<?php
$image1 = new imagick(); // Init empty object
$image2 = new imagick("image2.png");
// Set Lowlight (resulting background) to transparent, not "original image with a bit of opacity"
$image1->setOption('lowlight-color','transparent');
// Switch the default compose operator to Src, like in example
$image1->setOption('compose', 'Src');
// Now read image
$image1->readImage("image1.png");
// Result will not have a background
$result = $image1->compareImages($image2, Imagick::METRIC_MEANSQUAREERROR);