กำลังพยายามยืนยันรูปภาพด้วย PHPUnit หรือไม่? โปรเจ็กต์นี้มีข้อจำกัดและการยืนยันที่จำเป็นซึ่งอนุญาตให้คุณทำเช่นนั้นได้
รองรับการเปรียบเทียบ ไฟล์บนดิสก์ รวมถึง ทรัพยากรรูปภาพ ในหน่วยความจำ
เพิ่มแพ็คเกจนี้ไปยังการพึ่งพาผู้พัฒนา Composer ของคุณ:
composer require --dev meyfa/phpunit-assert-gd
ตารางความเข้ากันได้
เวอร์ชัน AssertGD | รองรับเวอร์ชัน 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
หากคุณคาดว่า 2 รูปภาพจะเท่ากันทุกประการ ใช้ 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
ใหม่ไปยังลำดับที่ 5 พารามิเตอร์ของเมธอด 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 เป็นสิ่งที่ตรงกันข้ามโดยสิ้นเชิง
จากนั้นคุณอาจระบุอินสแตนซ์ของคลาสเป็นพารามิเตอร์ที่ 5 ของเมธอด assertSimilarGD
หรือ assertNotSimilarGD
เพื่อใช้วิธีการคำนวณนี้เพื่อกำหนดความแตกต่างของรูปภาพ