Я быстро взглянул на PHP ImageMagick и GD , и ни у одного из них не было встроенного способа сделать это. Подход может состоять в том, чтобы использовать ImageMagick, чтобы разделить большее изображение на меньшее (такого же размера, как и меньшее) и начать сравнивать их с меньшим.
Однако, я полагаю, это будет очень медленно.
Вы можете сделать это с помощью imagemagick, если вы используете системный вызов в своем коде PHP.
Я не знаю, хотите ли вы попробовать это, но вот как это можно сделать:
<?php
//set a bigger time out limit because comparison takes a while
set_time_limit ( 275 ) ;
//the bigger image
$bigimage = "big.bmp";
//the smaller image
$smallimage = "small.bmp";
//result image
$resimg = "/tmp/similarity";
//system call
$output = shell_exec("(compare -metric AE -subimage-search ".$bigimage." ".$smallimage." ".$resimg." > /dev/null) 3>&1 1>&2 2>&3");
//result is something like "0 @ 251,263"
$res = explode("@",$output);
if($res[0]==0)
{
echo "Perfect match<br/>";
$res = explode(",",$res[1]);
echo "width: ".$res[0];
echo "<br/>";
echo "height: ".$res[1];
} else {
echo "Not match";
}
?>
Я тестировал приведенный выше код в Linux-боксе с XAMPP для Linux 1.7.3a и ImageMagick 6.7.1-0 2011-07-10 Q16.
О сравнении Я использую метрику AE (абсолютная ошибка), которая подсчитывает, сколько пикселей различаются.
Результат выводится в поток ошибок (STERR).
Подробнее о поиске подизображений в imagemagick вы можете найти здесь .
Удачи:)