目录

Java-比对两张图片的差异

目录

Java 比对两张图片的差异

1.基本介绍

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

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());
    }

}

结果输出

https://i-blog.csdnimg.cn/blog_migrate/5e331acf444fdc7589040b71db881db6.png

(源图片)

https://i-blog.csdnimg.cn/blog_migrate/2994baf47b10cc647047ebef5e199dda.png

(对比图片)

https://i-blog.csdnimg.cn/blog_migrate/2bb472855a87633f0b863d05e586d9ff.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());
      }

}

结果输出

https://i-blog.csdnimg.cn/blog_migrate/4e0e63a3f6b83abc5e09278e9f4e08f0.png

(源图片)

https://i-blog.csdnimg.cn/blog_migrate/470a70fca6ff089d7ab51ff147b13e59.png

(对比图片)

https://i-blog.csdnimg.cn/blog_migrate/b4a661496e1bdc6fa4b27ae56b3739ab.png

(对比结果)

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

4.源码下载

IDEA 源码工程 demo 下载见原文。

[Java 比对两张图片的差异

欢迎来到陈冬冬的个人经验分享平台

https://i-blog.csdnimg.cn/blog_migrate/a3e4a424fa486ade5ddb9edbaf864b85.png “Java 比对两张图片的差异”)