使用ImageMagick比较两个图像

时间:2013-12-12 01:25:12

标签: php imagemagick compare

我正在尝试拍摄两张图片并使用ImageMagick进行比较。

我想知道图像是否接近相同并返回一个数字以存储在php中的变量中并显示在我的浏览器屏幕中。

我的托管帐户是使用bluehost而我已通过调整图像大小进行测试,并且已安装并运行ImageMagick。以下代码适用于此处:http://zing-cards.com/imagetest2.php

<?php
$photo="/home/tcsdesig/public_html/zing/flower.jpg";
$cmd = "/usr/bin/convert $photo -thumbnail 100x100 JPG:-";

header("Content-type: image/jpeg");
passthru($cmd, $retval);

?>

我理解以下命令行代码(根据此post)应该以数字格式得到结果:

compare -metric RMSE first.png second.png NULL:

到目前为止,这是我的代码:

<?php
$photoPath1="/home/*username*/public_html/flower.jpg";
$photoPath2="/home/*username*/public_html/flower1.jpg";

$cmd = "/usr/bin/compare -metric RMSE $photoPath1 $photoPath2 NULL:";
exec($cmd);
?>

如何在浏览器中显示此值?

除了上面的代码,我尝试过:

$result = exec($cmd);
echo $result;

根据我的理解,这应该显示一个较低的数字(因为图像是相同的),如果我使用完全不同的图像,他们应该显示一个很高的数字,但我没有得到任何结果。

1 个答案:

答案 0 :(得分:2)

如果我这样做

<?php
    $photoPath1="/home/*username*/public_html/flower.jpg";
    $photoPath2="/home/*username*/public_html/flower1.jpg";

    $result = exec("/usr/bin/compare -metric RMSE /usr/share/pixmaps/faces/dice.jpg /usr/share/pixmaps/faces/fish.jpg NULL:");
    echo $result;
?>

我得到了

20455.4 (0.312129)

这是我的期望,因为图像完全不同......

我想你应该事先在命令行上尝试compare ......

例如,如果您的系统上没有安装compare,则不会得到任何结果......

更新:要在持续缺乏产出的情况下进一步调查,请执行以下操作:

<?php
    $photoPath1 = "/home/*username*/public_html/flower.jpg";
    $photoPath2 = "/home/*username*/public_html/flower1.jpg";

    $compareCommand = "/usr/bin/compare";
    if (!is_executable($compareCommand)) die("Sorry, can't execute $compareCommand!");
    $output = shell_exec("$compareCommand -metric RMSE $photoPath1 $photoPath2 NULL: 2>&1");
    print $output;
?>

更新2

在评论中回答OP问题:

在转换手册页中未指定是否以及如何仅打印RMSE错误百分比......

您可以在命令中添加(例如)| sed -e 's/.*(\(.*\))/\1/g',以保持RMSE错误百分比......