gpt4 book ai didi

java - 如何在Java中比较两个图像

转载 作者:行者123 更新时间:2023-12-02 00:53:38 26 4
gpt4 key购买 nike

我喜欢比较两张图片。 imagemagic 工具使用 cmd 提示符为我做这件事。它比较两个图像(例如按钮的位置不同)并以突出显示差异的新 gif 图像输出结果图像。但是我想要一些像这样生成新图像的工具,但前提是存在差异。请建议我如何使用任何工具来做到这一点,或者即使可以使用 selenium 和 java 来做到这一点。即使它们之间没有区别,imagemagic 也会生成新的结果图像。

编辑:我已经完成了 RnD 并得出结论,可以通过 selenium 使用 imagemagic + iam4java 来比较图像,但仍然找不到如何设置只有在存在差异时才生成输出图像的条件

最佳答案

使用java比较2张图片:

    BufferedImage imgA = ImageIO.read(new File("C:/img/picA.jpg")); 
BufferedImage imgB = ImageIO.read(new File("C:/img/picB.jpg"));

boolean bufferedImagesEqual(BufferedImage img1, BufferedImage img2) {
if (img1.getWidth() == img2.getWidth() && img1.getHeight() == img2.getHeight()) {
for (int x = 0; x < img1.getWidth(); x++) {
for (int y = 0; y < img1.getHeight(); y++) {
if (img1.getRGB(x, y) != img2.getRGB(x, y))
return false;
}
}
} else {
return false;
}
return true;
}

要生成差异图像,您可以执行以下操作:

    private static void subtractImages(BufferedImage image1, BufferedImage image2) throws IOException {
BufferedImage image3 = new BufferedImage(image1.getWidth(), image1.getHeight(), image1.getType());
int color;
for(int x = 0; x < image1.getWidth(); x++)
for(int y = 0; y < image1.getHeight(); y++) {
color = Math.abs(image2.getRGB(x, y) - image1.getRGB(x, y));
image3.setRGB(x, y, color);
}
ImageIO.write(image3, "bmp", new File("image.bmp"));
}

Source of subtractImages method

Source of bufferedImagesEqual method

Gist with a working example

关于java - 如何在Java中比较两个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37598977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com