我的第一个想法是获取更改前后图像的哈希值,然后查看哈希值是否相同。这将告诉您图像是否已更改。
这是一个可以在代码中使用的快速示例和函数。
这个函数接受URL
图像并返回该图像的 MD5 哈希值。
public static String getHashOfImage(URL imageUrl) throws IOException, NoSuchAlgorithmException
{
BufferedImage buffImg = ImageIO.read(imageUrl);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(buffImg, "png", outputStream);
byte[] data = outputStream.toByteArray();
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(data);
byte[] digest = md5.digest();
return new BigInteger(1, digest).toString(16);
}
这是一个使用包含三个随机图像的测试站点的快速示例。您应该会看到为三个图像中的每一个打印的哈希值。每次加载页面时,都会加载一组不同的三张图像,但如果您运行几次,您应该会得到两个相同的实例,这样您就可以验证当两张图像相同时哈希值确实相同.
driver.get("http://the-internet.herokuapp.com/dynamic_content");
List<WebElement> images = driver.findElements(By.cssSelector("img"));
for (int i = 1; i < images.size(); i++)
{
System.out.println(getHashOfImage(new URL(images.get(i).getAttribute("src"))));
}
示例输出看起来像
c8977e445530e09a06ce368f7f5e70dd
c8977e445530e09a06ce368f7f5e70dd
62baf598cd68eec5725df67e33c05cba
其中前两个图像相同但与第三个不同。
其中一些代码改编自https://sites.google.com/site/matthewjoneswebsite/java/md5-hash-of-an-image