هل تحاول تأكيد الصور باستخدام PHPUnit؟ يوفر هذا المشروع القيد والتأكيدات المطلوبة التي تسمح لك بذلك.
وهو يدعم مقارنة الملفات الموجودة على القرص وكذلك موارد الصور في الذاكرة.
أضف هذه الحزمة إلى تبعيات تطوير Composer الخاصة بك:
composer require --dev meyfa/phpunit-assert-gd
جدول التوافق
نسخة تأكيدGD | نسخة PHP المدعومة | نسخة PHPUnit المدعومة |
---|---|---|
4.* | >= 8.1 | 10.1 |
3.* | >= 7.3 | 9 |
2.* | >= 7.2 | 8 |
1.* | 5.3.3 - 8.0 | 4.8.36 - 6.5.0 |
التأكيدات متاحة كسمة، بحيث يمكنك use
بسهولة في فئة حالة الاختبار الخاصة بك:
<?php
use AssertGD GDAssertTrait ;
class ExampleTest extends PHPUnit Framework TestCase
{
// this trait adds the assert methods to your test case
use GDAssertTrait;
public function testSomething ()
{
$ this -> assertSimilarGD ( ' ./tests/expected.png ' , ' ./tests/actual.png ' );
}
}
استخدمتأكيد assertSimilarGD
إذا كنت تتوقع أن تكون الصورتان متساويتين تمامًا. استخدمتأكيد assertNotSimilarGD
إذا كنت تتوقع وجود اختلافات.
$ this -> assertSimilarGD ( ' ./tests/img.png ' , ' ./tests/same.png ' );
$ this -> assertNotSimilarGD ( ' ./tests/img.png ' , ' ./tests/other.png ' );
قم بتوفير رقم بين 0 و1 لتعيين حد الخطأ. على سبيل المثال، تسمح القيمة 0.2 بفارق 20% على الأكثر.
$ this -> assertSimilarGD ( ' ./tests/img.png ' , ' ./tests/similar.png ' , '' , 0.2 );
بدلاً من مسارات الملفات، يمكنك تمرير موارد صورة GD. وهذا يلغي الاضطرار إلى كتابة شيء ما على القرص قبل المقارنة.
$ img = imagecreatetruecolor ( 10 , 10 );
$ this -> assertSimilarGD ( ' ./tests/empty-10x10.png ' , $ img );
imagedestroy ( $ img );
إذا كنت بحاجة إلى تكوين كائنات وهمية أو إجراء استدعاءات مطابقة أخرى أكثر تعقيدًا، فاستخدم isSimilarGD
للحصول على كائن قيد (مشابه لما يمكن إرجاعه بواسطة equalTo
، isTrue
، وما إلى ذلك).
$ this -> assertThat (
' ./tests/actual.png ' ,
$ this -> isSimilarGD ( ' ./tests/expected.png ' )
);
افتراضيًا، تحسب هذه المكتبة الفرق بين صورتين عن طريق مقارنة معلومات قناة الألوان RGBA عند كل إحداثي بكسل للصورة المصدر وصورة الاختبار، وحساب متوسط الفرق بين كل بكسل لحساب درجة الفرق.
سيعمل هذا مع معظم الحالات، ولكنه قد يعطي درجات غير صحيحة في ظروف معينة، مثل الصور التي تحتوي على قدر كبير من الشفافية.
يمكن تمكين طريقة حساب بديلة، تعمل على قياس قنوات ألوان RGB استنادًا إلى شفافية ألفا الخاصة بها - مما يعني أن وحدات البكسل الأكثر شفافية ستؤثر على درجة الصعوبة بشكل أقل لتعويض الاختلاف الأقل وضوحًا في الصورة نفسها - عن طريق إضافة مثيل ScaledRgbChannels
جديد إلى الخامس معلمة الأساليب assertSimilarGD
أو assertNotSimilarGD
.
use AssertGD DiffCalculator ScaledRgbChannels ;
public function testImage ()
{
$ this -> assertSimilarGD (
' expected.png ' ,
' actual.png ' ,
'' ,
0 ,
new ScaledRgbChannels ()
);
}
إذا كنت ترغب في تخصيص كيفية إجراء العمليات الحسابية بشكل كامل في هذه المكتبة، فيمكنك أيضًا إنشاء خوارزمية الحساب الخاصة بك عن طريق إنشاء فئة تقوم بتنفيذ واجهة AssertGdDiffCalculator
.
يجب أن توفر الفئة التي تنفذ هذه الواجهة طريقة calculate
يتم توفيرها لمثيلين GdImage
، وإحداثيات X وY (مثل ints
) للبكسل الذي تتم مقارنته في كلتا الصورتين.
يجب أن تُرجع الطريقة عددًا float
بين 0
و 1
، حيث يكون 0 مطابقًا تمامًا و1 هو العكس تمامًا.
يمكنك بعد ذلك توفير مثيل للفئة كمعلمة خامسة لأسلوب assertSimilarGD
أو assertNotSimilarGD
لاستخدام طريقة الحساب هذه لتحديد اختلاف الصورة.