After $ im->cropImage method, $ im->subImageMatch doesn't work, before using $ im->subImageMatch, use $ im->setImagePage(0, 0, 0, 0);
The sequence is as follows:
$ im->cropImage();
$ im->setImagePage (0, 0, 0, 0);
$ im->subImageMatch()
(PECL imagick 3 >= 3.3.0)
Imagick::subImageMatch — Выполняет поиск фрагмента изображения в текущем изображении и возвращает второстепенное изображение
$Imagick
, array &$offset
= ?, float &$similarity
= ?): ImagickВыполняет поиск фрагмента изображения в текущем изображении и возвращает второстепенное изображение, в котором точное совпадение является полностью белым, а если ни один из пикселей не совпадает — чёрным, в противном случае - некоторым промежуточным уровнем серого. Вы также можете передать необязательные параметры bestMatch и similarity. После вызова функции similarity будет установлено на "score" сходства между второстепенным изображением и соответствующей позицией на большом изображении, bestMatch будет содержать ассоциативный массив с элементами x, y, width, height, которые описывают совпадающую область.
Imagick
offset
similarity
Новое изображение, отображающее степень сходства в каждом пикселе.
Пример #1 Пример использования Imagick::subImageMatch()
<?php
function subImageMatch($imagePath) {
$imagick = new \Imagick(realpath($imagePath));
$imagick2 = clone $imagick;
$imagick2->cropimage(40, 40, 250, 110);
$imagick2->vignetteimage(0, 1, 3, 3);
$similarity = null;
$bestMatch = null;
$comparison = $imagick->subImageMatch($imagick2, $bestMatch, $similarity);
$comparison->setImageFormat('png');
header("Content-Type: image/png");
echo $imagick->getImageBlob();
}
?>
After $ im->cropImage method, $ im->subImageMatch doesn't work, before using $ im->subImageMatch, use $ im->setImagePage(0, 0, 0, 0);
The sequence is as follows:
$ im->cropImage();
$ im->setImagePage (0, 0, 0, 0);
$ im->subImageMatch()