Как отличить (сравнить) 2 изображения с Imagick в PHP

В настоящее время существует множество передовых кросс-платформенных инструментов сравнения файлов изображений, которые можно легко использовать с любого компьютера. Если вы разработчик PHP, вы можете реализовать такую ​​функцию на своем сервере с помощью Imagick. В этой статье мы покажем вам, как различать следующие 2 изображения (изображение A и изображение B), используя Imagick в PHP:

Изображения для сравнения Imagick

Заметка

Чтобы указать путь к изображению, мы используем getcwd функция для извлечения текущего рабочего каталога, потому что, как вы знаете, Imagick не работает должным образом с относительным путем. Вместо этого вы должны указать абсолютный путь к изображению.

1. Сравнение со вторым изображением на фоне

В качестве первого примера мы объясним вам, как отличить 2 изображения самым простым способом. По умолчанию compareImages Метод абстрактно скомпонует изображение поверх первого и автоматически выделит то, что не соответствует первому изображению, красным цветом.

compareImages($image2, Imagick::METRIC_MEANSQUAREERROR);
// The first item of the result array is an Imagick Image object
// so convert it into its PNG format
$result[0]->setImageFormat("png");
// Output image to the browser
header("Content-Type: image/png");
echo $result[0];

Предыдущий код будет генерировать следующий ответ в браузере:

Imagick сочинять различия и выделить

2. Получить прозрачное изображение с различиями

В случае, если вы не можете оценить разницу с изображением, сгенерированным базовым примером Imagick, вместо этого вы хотели бы вместо этого нарисовать изображения поверх нового пустого изображения. Вы можете достичь этого, полагаясь на логику ImageMagick, в частности, используя аргумент compose в командной строке. Композиция изображений — это процесс объединения двух (и только двух) изображений различными способами. Из всех способов составления изображения с помощью Imagick мы будем использовать один из методов «очистки», а именно Src, Вы можете добавить эту опцию к изображению, используя setOption метод. С использованием lowlight-color Вы можете указать цвет фона полученного изображения, а затем прочитать исходное изображение (изображение 1) для сравнения с другим. Объект результата может быть использован для получения результирующего изображения.

Посмотрите на следующий пример:

setOption('lowlight-color','transparent');
// Switch the default compose operator to Src, like in example
$image1->setOption('compose', 'Src');
// Now read the original image (image 1)
$image1->readImage(getcwd(). "/example_a.png");
// Result will not have a background
$result = $image1->compareImages($image2, Imagick::METRIC_MEANSQUAREERROR);
$result[0]->setImageFormat("png");
// Output image to the browser
header("Content-Type: image/png");
echo $result[0];

Предыдущий код будет генерировать в качестве вывода следующее изображение:

Imagick различия изображений

В случае исключения

Обычно этот процесс не должен завершаться ошибкой, если Imagick настроен правильно. Если вы столкнулись со следующим исключением с вашим кодом: Uncaught exception ImagickException Compare images failedМы рекомендуем вам проверить, соответствуют ли размеры изображений, потому что если вы сравниваете 2 изображения, размер которых не одинаков, это приведет к ошибке (обычно это не должно происходить, как если бы размеры не были одинаковыми, процесс дифференцирования должен подчеркните, что изображения имеют не одинаковые размеры).

Ссылка на основную публикацию
Adblock
detector