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 カラー チャネル情報を比較し、各ピクセル間の差を平均して差スコアを計算することにより、2 つのイメージ間の差を計算します。
これはほとんどの場合に機能しますが、透明度を多く含む画像など、特定の状況では誤ったスコアが与えられる可能性があります。
別の計算方法は、アルファ透明度に基づいて RGB カラー チャネルをスケーリングします。つまり、透明ピクセルが増えると、画像自体の目に見えにくい違いを相殺するために難易度スコアへの影響が少なくなります。新しいScaledRgbChannels
インスタンスを 5 番目に追加することで有効にできます。 assertSimilarGD
メソッドまたはassertNotSimilarGD
メソッドのパラメータ。
use AssertGD DiffCalculator ScaledRgbChannels ;
public function testImage ()
{
$ this -> assertSimilarGD (
' expected.png ' ,
' actual.png ' ,
'' ,
0 ,
new ScaledRgbChannels ()
);
}
このライブラリでの計算方法を完全にカスタマイズしたい場合は、 AssertGdDiffCalculator
インターフェイスを実装するクラスを作成して、独自の計算アルゴリズムを作成することもできます。
このインターフェイスを実装するクラスは、2 つのGdImage
インスタンスと、両方のイメージで比較されるピクセルの X 座標と Y 座標 ( ints
として) を提供するcalculate
メソッドを提供する必要があります。
このメソッドは0
と1
間のfloat
を返す必要があります。0 は完全に一致し、1 は完全に反対です。
次に、このクラスのインスタンスをassertSimilarGD
またはassertNotSimilarGD
メソッドの 5 番目のパラメーターとして提供し、この計算メソッドを使用してイメージの差分を決定することができます。