مقارنة الصور هي مكتبة PHP لمقارنة الصور والتجزئة. يمكنك مقارنة 2 والمزيد من الصور باستخدام طريقة التجزئة الإدراكية.
بناءً على https://github.com/kennethrapp/phasher ، مع PHP 8 و Phpunit دعم. تم التخلي عن المشروع الأصلي في نوفمبر 2017.
التجزئة الإدراكية هي طريقة لإنشاء تجزئة لصورة تسمح بمقارنة صور متعددة من خلال فهرس التشابه. يمكنك معرفة المزيد في عامل Hacker و 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 enum مع واحدة من القيم التالية: 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 distaryHashStrategy. لاستخدامه ، تحتاج إلى استدعاء طريقة setHashStrategy() ImageComparator وتمرير مثيل الإستراتيجية:
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 يمكنك أن تقرأ عن الأساليب المتاحة في صفحة الويكي الخاصة بنا