Pembanding gambar adalah pustaka PHP untuk perbandingan gambar dan hashing. Anda dapat membandingkan 2 dan lebih banyak gambar menggunakan metode hashing perseptual.
Berdasarkan paket https://github.com/kennethrapp/phasher, dengan php 8 dan dukungan phpunit. Proyek asli ditinggalkan pada November 2017.
Hashing perseptual adalah metode untuk menghasilkan hash dari suatu gambar yang memungkinkan banyak gambar dibandingkan dengan indeks kesamaan. Anda dapat mengetahui lebih lanjut di Hacker Factor dan Phash.org.
Untuk menginstal perpustakaan, jalankan:
composer require sapientpro/image-comparator
ImageComparator adalah kelas inti perpustakaan:
use SapientPro ImageComparator ImageComparator ;
$ imageComparator = new ImageComparator()Setelah membuat instance, Anda dapat menggunakan salah satu metode yang tersedia:
$ imageComparator -> compare ( ' your-images/your-image1.jpg ' , ' your-images/your-image12.jpg ' ); Jika jalur gambar tidak dapat diselesaikan, ImageResourceException akan dilemparkan:
$ imageComparator -> hashImage ( ' your-images/non-existent-image.jpg ' ); // SapientProImageComparatorImageResourceException: Could not create an image resource from fileContoh Penggunaan:
Kami memiliki dua gambar:
https://github.com/sapientpro/image-comparator/blob/master/tests/images/ebay-image.png?raw=true


Sekarang, mari kita bandingkan mereka:
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.5Semakin tinggi hasilnya, semakin tinggi kesamaan gambar.
Mari kita bandingkan gambar yang berbeda:


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 Sudut rotasi dapat dilewati jika dibandingkan gambar diputar. Anda harus lulus sapientpro imagecomparator enum imagerotationangle enum dengan salah satu nilai berikut: D0 = 0 Degress, D90 = 90 derajat, D180 = 180 derajat, D270 = 270 derajat
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 Anda juga dapat menggunakan metode detect() yang akan memutar gambar yang dibandingkan dan mengembalikan persentase kesamaan tertinggi:
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 Dengan metode compareArray() dan detectArray() Anda dapat membandingkan gambar sumber dengan sejumlah gambar yang Anda inginkan. Perilaku itu sama seperti dalam metode compare() dan 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] Jika diperlukan, Anda dapat membuat sumber daya gambar persegi dari gambar lain dan melewatkannya untuk compare() , compareArray() , detect() , metode detectArray dan 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; Jika diperlukan, Anda dapat mengonversi array yang dihasilkan dari hashImage() ke string biner dan meneruskannya ke metode 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; Secara default, gambar hash menggunakan algoritma hashing rata -rata, yang diimplementasikan dalam SapientProImageComparatorStrategyAverageHashStrategy . Strategi ini diinisialisasi dalam konstruktor ImageComparator .
Dimungkinkan juga untuk menggunakan algoritma hashing perbedaan, diimplementasikan dalam SapientPro Imagecomparator Strategi DifferenceHashStrategy. Untuk menggunakannya, Anda perlu memanggil metode setHashStrategy() ImageComparator dan lulus instance dari strategi:
use SapientPro ImageComparator Strategy DifferenceHashStrategy ;
$ imageComparator -> setHashStrategy ( new DifferenceHashStrategy ());
$ imageComparator -> hashImage ( ' image1.jpg ' ); Jika strategi ditetapkan oleh setHashingStrategy() , itu akan digunakan di bawah kap dalam metode perbandingan lainnya:
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 Anda dapat membaca tentang metode yang tersedia di halaman wiki kami