開発者ブログ

画像比較機能のみを使用する

Last modified by hashimot on 2017/09/01, 17:00

Pitaliumの画像比較機能のみを使って、あらかじめ用意した2枚の画像を比較することができます。
比較の際にどの比較方法を使うか指定することで、比較の方法を切り替えることが可能です。

タイプ:DEFAULT

Pitaliumのデフォルトの比較方法です。
画像全体を1ピクセルずつ比較し、一致しないピクセルを差分とみなします。

public class ImageCompareTest {

@Test
public void defaultImageCompareTest() throws Exception {
// 比較する画像の読み込み
BufferedImage leftImage = ImageIO.read(new File("ImageA.png"));
BufferedImage rightImage = ImageIO.read(new File("ImageB.png"));

// デフォルトの比較方法(完全一致)で比較
ImageComparedResult result = ImageUtils.compare(leftImage, null, rightImage, null, new CompareOption[] {
new CompareOption(CompareOptionType.DEFAULT, new DefaultComparisonParameters()) });

// 差分があれば差分画像を出力
if (result.isFailed()) {
DiffPoints diffPoints = (DiffPoints) result;
final BufferedImage diffImage = ImageUtils.getDiffImage(leftImage, rightImage, diffPoints);
ImageIO.write(diffImage, "png", new File("diffImage.png"));
Assert.fail("画像が一致しません");
}
}
}

タイプ:IGNORE_CLEAR_PIXELS

v1.2.0から追加されました。
このタイプを指定すると、比較する画像(2枚のどちらでも)に透明度0xFF*ではない*ピクセルがあった場合、そのピクセルは比較の対象外として無視します。
ピクセルを透過することで比較時に無視する領域を指定できるため、座標ではなく画像ベースで除外領域を設定したい場合に利用できます。

public class ImageCompareTest {

@Test
public void ignoringClearPixelsCompareTest() throws Exception {
// 比較する画像の読み込み
BufferedImage leftImage = ImageIO.read(new File("ImageA2.png"));
BufferedImage rightImage = ImageIO.read(new File("ImageB.png"));

// 透明ピクセルを無視して比較
ImageComparedResult result = ImageUtils.compare(leftImage, null, rightImage, null,
new CompareOption[] { new CompareOption(CompareOptionType.IGNORE_CLEAR_PIXELS) });

// 差分があれば差分画像を出力
if (result.isFailed()) {
DiffPoints diffPoints = (DiffPoints) result;
final BufferedImage diffImage = ImageUtils.getDiffImage(leftImage, rightImage, diffPoints);
ImageIO.write(diffImage, "png", new File("diffImage2.png"));
Assert.fail("画像が一致しません");
}
}
}

Copyright (C) 2012-2017 NS Solutions Corporation, All Rights Reserved.