Appiumなどを始めとするテストツールでは、UIの表示確認にスクリーンショットを撮影してから、期待結果とそれらを比較する、という方法が多くとられているかと思います。
そのとき使う画像比較ツールに関してのメモとなります。
- perceptualdiff
私が画像比較に求めた内容は以下です。
- ずれが検出された場合、人の目視による確認が良い
- すべてを機械に任せない。機械には一致/不一致のみの判定のみさせ、不一致のみ人が確認する。
- より単純に比較を行いたい
- 多機能で重いツールよりも、単機能で軽いツールを使いたい
- コマンドラインで、複数の開発環境共通して使える
インストール
homebrewを使い、Macにperceptualdiffをインストールします。
$ brew install perceptualdiff
使用例
例えば、sample.pngとsample2.pngを比較する場合、以下コマンドにより比較することができます。
※比較はピクセル単位で行われます。
$ perceptualdiff -threshold 3000 sample.png sample2.png
PASSの場合、標準出力には何も出ません。FAILの場合、何pixel差異があるのか、ということが標準出力に表示されます。
-thresholdオプションは、PASSとFAILの閾値を指定するためのオプションです。上記の例では、3000pixelを境とし、以下ならPASS、3000pixelよりも差異が大きいならFAILとします。
詳細モード(verboseオプションあり)を指定することで、処理の内容を見ることもできます。
他のオプション要素に関しては、-hオプションの出力をご確認ください。
$ perceptualdiff -h
閾値を3000pixelとした場合
$ perceptualdiff -verbose -threshold 3000 sample.png sample2.png Field of view is 45.000000 degrees Threshold pixels is 3000 pixels The Gamma is 2.200000 The Display's luminance is 100.000000 candela per meter squared Converting RGB to XYZ Constructing Laplacian Pyramids Performing test PASS: Images are perceptually indistinguishable 2186 pixels are different
閾値を1000pixelとした場合
$ perceptualdiff -verbose -threshold 1000 sample.png sample2.png Field of view is 45.000000 degrees Threshold pixels is 1000 pixels The Gamma is 2.200000 The Display's luminance is 100.000000 candela per meter squared Converting RGB to XYZ Constructing Laplacian Pyramids Performing test FAIL: Images are visibly different 2186 pixels are different
imagemagickにおいても同様の検出方法になっていた一方、imagemagickは多機能で重かったので、個人的にはperceptualdiffのほうが使い易いです。
一方、画像の比較領域を限定する等が必要な場合、imagemagickにて加工した後にpdifにかける等すれば良いのかなと思います。