我正在尝试拍摄两张图片并使用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;
根据我的理解,这应该显示一个较低的数字(因为图像是相同的),如果我使用完全不同的图像,他们应该显示一个很高的数字,但我没有得到任何结果。
答案 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错误百分比......