Java 比对两张图片的差异


placeholder image
admin 发布于:2023-07-09 21:21:33
阅读:loading

1.基本介绍

Github上的“https://github.com/akullpp/awesome-java页整理了非常多的各类Java组件的实现,前面一篇从它的图片处理篇找到了《image-comparison》进行了动手实践,关于图片处理的二维码组件《ZXing》本站曾有实践;关于图片识别的组件《Tess4J》页略有实践;关于图片操作(放大、缩小、旋转、水印等)的《Thumbnailator》组件也略有实践,所以在看到了《image-comparison》这个时觉得挺有意思的,专门拿过来实践了一下,它可以比较 2 个相同大小的图像(图片大小必须一致),并通过绘制矩形直观地显示差异,图像的某些部分可以从比较中排除,可用于自动化质量保证测试,项目的官方地址为“https://github.com/romankh3/image-comparison”,更多描述和项目介绍可转至这里查看。

2.Github原图实践

代码实践这块应用起来比较简单,直接借助于官网的图片进行运行输出,可以得到与官网一致的效果,详细如下文所示:

参考代码

/**
 * 图片比较演示 https://github.com/romankh3/image-comparison
 * 【Github官方图片,略有小改动】
 *
 * @author chendd
 * @date 2023/7/8 14:37
 */
public class GithubImageComparisonTest {

    public static void main(String[] args) {
        //加载图片
        BufferedImage expectedImage = ImageComparisonUtil.readImageFromResources("Expected.png");
        BufferedImage actualImage = ImageComparisonUtil.readImageFromResources("Actual.png");
        //对比两个图片
        ImageComparisonResult imageComparisonResult = new ImageComparison(expectedImage, actualImage).compareImages();
        String folder = ImageComparisonUtil.class.getClassLoader().getResource("").getPath();
        //存储图片和输出结果
        ImageComparisonUtil.saveImage(new File(folder , "Github图片对比结果.png") , imageComparisonResult.getResult());
        System.out.println("Github图片对比状态:" + imageComparisonResult.getImageComparisonState());
    }

}

结果输出

Actual.png

(源图片)

Expected.png

(对比图片)

Github图片对比结果.png

(对比结果)

PS:对比结果的图片中两处红色细线边框就是程序执行后自动标记的。

3.自定义图片实践

参考代码

/**
 * 图片比较演示 https://github.com/romankh3/image-comparison
 *
 * @author chendd
 * @date 2023/7/8 14:37
 */
public class ImageComparisonTest {

    public static void main(String[] args) {
        //加载图片
        BufferedImage expectedImage = ImageComparisonUtil.readImageFromResources("图片1.png");
        BufferedImage actualImage = ImageComparisonUtil.readImageFromResources("图片2.png");
        //对比两个图片
        ImageComparisonResult imageComparisonResult = new ImageComparison(expectedImage, actualImage).compareImages();
        String folder = ImageComparisonUtil.class.getClassLoader().getResource("").getPath();
        //存储图片和输出结果
        ImageComparisonUtil.saveImage(new File(folder , "图片对比结果.png") , imageComparisonResult.getResult());
        System.out.println("图片对比状态:" + imageComparisonResult.getImageComparisonState());
    }

}

结果输出

图片1.png

(源图片)

图片2.png

(对比图片)

图片对比结果.png

(对比结果)

PS:对比结果的图片中两处红色细线边框就是程序执行后自动标记的,第一处是第11行的蓝色背景类名称,截图时双击选中了类名称,导致有背景色;第二处是第25行,增加了一行的代码注释;

4.源码下载

IDEA源码工程demo下载《demo.zip》。


 点赞


 发表评论

当前回复:作者

 评论列表


留言区