이미지 비교기는 이미지 비교 및 해싱을위한 PHP 라이브러리입니다. 지각 해싱 방법을 사용하여 2 개 이상의 이미지를 비교할 수 있습니다.
php 8 및 phpunit 지원이 포함 된 https://github.com/kennethrapp/phasher 패키지를 기반으로합니다. 원래 프로젝트는 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 imageecomparator enum imageRotationangle ennum을 통과해야합니다. D0 = 0 Degress, D90 = 90도, D180 = 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 Strategy DishiphashStrategy에서 구현 된 차이 해싱 알고리즘을 사용할 수도 있습니다. 이를 사용하려면 imageecomparator의 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 페이지에서 사용 가능한 방법에 대해 읽을 수 있습니다.