Я пытаюсь взять два изображения и сравнить их с помощью 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); ?>
Я понимаю, что следующий код командной строки (согласно этому сообщению ) должен получить результаты в числовом формате:
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;
Из того, что я понимаю, это должно отображать небольшое число (поскольку изображения равны), и если я использую совершенно разные изображения, они должны отображать большое число, но я не получаю никаких результатов.
Здесь, если я это сделаю
<?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
Отвечая на вопрос ОП в комментарии:
На странице конвертирования man не указано, если и как можно печатать только процент ошибки RMSE …
Вы можете добавить (например) a | sed -e 's/.*(\(.*\))/\1/g'
| sed -e 's/.*(\(.*\))/\1/g'
, чтобы просто сохранить процент ошибки RMSE …