I quickly looked through PHP ImageMagick and GD , and none of them has a built-in way to do this. An approach might be to use ImageMagick to split a larger image into smaller ones (the same size as the smaller), and start comparing them to a smaller one.
However, it will be very slow, I suppose.
You can do this with imagemagick if you use a system call in your PHP code. I donβt know if you want to try, but here is how to do it:
<?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"; } ?>
I tested the above code in the Linux lineup with XAMPP for Linux 1.7.3a and ImageMagick 6.7.1-0 2011-07-10 Q16.
About Comparison I use the AE (Absolute Error) metric, which calculates how many pixels are different. The result is printed into the error stream (STERR). You can find more about image search in the form of imagemagick here .
Good luck :)
source share