圖像比較器是用於圖像比較和哈希的PHP庫。您可以使用感知散列方法比較2和更多圖像。
基於https://github.com/kennethrapp/phasher軟件包,並提供php 8和Phpunit支持。原始項目於2017年11月放棄。
感知散列是一種生成圖像哈希的方法,該方法允許通過相似性索引比較多個圖像。您可以在hacker factor和phash.org上找到更多信息。
要安裝庫,請運行:
composer require sapientpro/image-comparator
ImageComparator是圖書館的核心類別:
use SapientPro ImageComparator ImageComparator ;
$ imageComparator = new ImageComparator()創建實例後,您可以使用可用的一種方法:
$ imageComparator -> compare ( ' your-images/your-image1.jpg ' , ' your-images/your-image12.jpg ' );如果無法解析圖像路徑,則會拋出ImageResourceException :
$ imageComparator -> hashImage ( ' your-images/non-existent-image.jpg ' ); // SapientProImageComparatorImageResourceException: Could not create an image resource from file示例用法:
我們有兩個圖像:
https://github.com/sapientpro/image-comparator/blob/master/tests/images/ebay-image.png?raw=true


現在,讓我們比較它們:
use SapientPro ImageComparator ImageComparator ;
$ image1 = ' https://github.com/sapientpro/image-comparator/blob/feature/phasher-implementation/tests/images/ebay-image.png?raw=true ' ;
$ image2 = ' https://github.com/sapientpro/image-comparator/blob/feature/phasher-implementation/tests/images/amazon-image.png?raw=true '
$ imageComparator = new ImageComparator ();
$ similarity = $ imageComparator -> compare ( $ image1 , $ image2 ); //default hashing without rotation
echo $ similarity ; //87.5結果越高,圖像的相似性越高。
讓我們比較不同的圖像:


use SapientPro ImageComparator ImageComparator ;
$ image1 = ' https://github.com/sapientpro/image-comparator/blob/feature/phasher-implementation/tests/images/ebay-image2.png?raw=true ' ;
$ image2 = ' https://github.com/sapientpro/image-comparator/blob/feature/phasher-implementation/tests/images/amazon-image2.png?raw=true '
$ imageComparator = new ImageComparator ();
$ similarity = $ imageComparator -> compare ( $ image1 , $ image2 ); //default hashing without rotation
echo $ similarity ; //54.7如果比較圖像旋轉,則可以通過旋轉角度。您必須通過 sapientpro imagecomparator enum imagerotationangle枚舉以下值之一: D0 = 0 degress, D90 = 90度, D180 = 180 = 180度, D270 = 270度
use SapientPro ImageComparator Enum ImageRotationAngle ;
$ similarity = $ imageComparator -> compare ( $ image1 , $ image2 , ImageRotationAngle:: D180 ); //compared image will be considered rotated by 180 degrees
echo $ similarity ; //95.3您還可以使用detect()方法,該方法將旋轉比較圖像並返回最高比例的相似性:
use SapientPro ImageComparator ImageComparator ;
$ image1 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest1.jpg ' ;
$ image2 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest1-copyrighted.jpg '
$ imageComparator = new ImageComparator ();
$ similarity = $ imageComparator -> detect ( $ image1 , $ image2 );
echo $ similarity ; //95.3使用compareArray()和detectArray()方法,您可以將源圖像與所需數量的圖像進行比較。該行為與compare()和detect()方法相同。
use SapientPro ImageComparator ImageComparator ;
$ image1 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest1.jpg ' ;
$ image2 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest1-copyrighted.jpg '
$ image3 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest.jpg '
$ imageComparator = new ImageComparator ();
$ similarity = $ imageComparator -> compareArray (
$ image1 ,
[
' forest ' => $ image2 ,
' anotherForest ' => $ image3
]
); // returns ['forest' => 95.33, 'anotherForest' => 75.22]如果需要,您可以從另一個圖像創建一個平方圖像資源,然後將其傳遞給compare() , compareArray() , detect() , detectArray和hashImage()方法:
use SapientPro ImageComparator ImageComparator ;
$ image1 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest1.jpg ' ;
$ image2 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest1-copyrighted.jpg '
$ imageComparator = new ImageComparator ();
$ squareImage1 = $ imageComparator -> squareImage ( $ image1 );
$ squareImage2 = $ imageComparator -> squareImage ( $ image2 );
$ similarity = $ imageComparator -> compare ( $ squareImage1 , $ squareImage2 );
echo $ similarity //96.43;如果需要,您可以將結果數組從hashImage()轉換為二進製字符串,並將其傳遞給compareHashStrings()方法:
use SapientPro ImageComparator ImageComparator ;
$ image1 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest1.jpg ' ;
$ image2 = ' https://raw.githubusercontent.com/sapientpro/phasher/feature/phasher-implementation/tests/images/forest1-copyrighted.jpg '
$ imageComparator = new ImageComparator ();
$ hash1 = $ imageComparator -> hashImage ( $ image1 );
$ hash2 = $ imageComparator -> hashImage ( $ image2 );
$ hashString1 = $ imageComparator -> convertHashToBinaryString ( $ hash1 );
$ hashString2 = $ imageComparator -> convertHashToBinaryString ( $ hash2 );
$ similarity = $ imageComparator -> compareHashStrings ( $ hashString1 , $ hashString2 );
echo $ similarity //96.43;默認情況下,使用平均散列算法將圖像哈希,該算法是在SapientProImageComparatorStrategyAverageHashStrategy中實現的。該策略是在ImageComparator的構造函數中初始化的。
也可以使用差異散列算法,該算法在sapientpro imagecomparator strument districhaststrategy中實現。要使用它,您需要調用ImageComparator的setHashStrategy()方法並傳遞策略的實例:
use SapientPro ImageComparator Strategy DifferenceHashStrategy ;
$ imageComparator -> setHashStrategy ( new DifferenceHashStrategy ());
$ imageComparator -> hashImage ( ' image1.jpg ' );如果該策略是由setHashingStrategy()設定的,則將在其他比較方法中使用它:
use SapientPro ImageComparator Strategy DifferenceHashStrategy ;
$ imageComparator -> setHashStrategy ( new DifferenceHashStrategy ());
$ imageComparator -> compare ( ' image1.jpg ' , ' image2.jpg ' ); // images will be hashed using difference hash algorithm and then compared 您可以在我們的Wiki頁面中閱讀有關可用方法的信息