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 ' );
}
}
2개의 이미지가 정확히 동일할 것으로 예상되면 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
인스턴스를 5번째 인스턴스에 추가하여 활성화할 수 있습니다. assertSimilarGD
또는 assertNotSimilarGD
메소드의 매개변수입니다.
use AssertGD DiffCalculator ScaledRgbChannels ;
public function testImage ()
{
$ this -> assertSimilarGD (
' expected.png ' ,
' actual.png ' ,
'' ,
0 ,
new ScaledRgbChannels ()
);
}
이 라이브러리에서 계산이 수행되는 방식을 완전히 사용자 정의하려면 AssertGdDiffCalculator
인터페이스를 구현하는 클래스를 생성하여 고유한 계산 알고리즘을 생성할 수도 있습니다.
이 인터페이스를 구현하는 클래스는 두 개의 GdImage
인스턴스와 두 이미지에서 비교되는 픽셀의 X 및 Y 좌표( ints
)가 제공되는 calculate
메서드를 제공해야 합니다.
이 메서드는 0
과 1
사이의 float
을 반환해야 합니다. 여기서 0은 정확히 일치하고 1은 완전히 반대입니다.
그런 다음 이미지 차이를 결정하기 위해 이 계산 방법을 사용하기 위해 클래스의 인스턴스를 assertSimilarGD
또는 assertNotSimilarGD
메서드의 5번째 매개 변수로 제공할 수 있습니다.