用于声明未更改的视觉输出的图像校验和

时间:2015-10-06 00:37:24

标签: unit-testing image-processing png

我有一个从代码生成图像的库,我想编写一个能够在多个测试用例中循环的功能测试套件并执行以下操作:

  1. 从测试用例中创建PNG图像
  2. 创建图像的校验和,
  3. 断言校验和与参考校验和相同。
  4. 通过与预先计算的参考校验和进行比较,我可以确定行为或库在没有逐像素检查图像的情况下不会改变。

    我注意到在创建PNG时,没有两个文件完全相同,尽管它们看起来很相似。我想各种时间戳总是存储在文件中。为此目的,这规则(普通)PNG文件。

    什么是适当的文件格式/哈希算法,用于声明视觉输出不会改变?

1 个答案:

答案 0 :(得分:1)

您可以使用ImageMagick,而不是编写应用程序来执行此操作。以下是将GIF转换为PNG,PPM和JPG,然后检查像素数据是否相同的示例,无论它是如何编码的:

# convert logo.gif logo.png
# convert logo.png logo.ppm
# convert logo.png logo.jpg
# identify -verbose logo.gif logo.jpg logo.png logo.ppm | grep signature
signature: 5c701306a9a985a0c93c8d11a1e761d7f8637577697fc60d7189b221388f8edf
signature: 97fee507ef8464e2a9be00e65c615aa096e30abc925113ff5a43c4dbf0f94513
signature: 5c701306a9a985a0c93c8d11a1e761d7f8637577697fc60d7189b221388f8edf
signature: 5c701306a9a985a0c93c8d11a1e761d7f8637577697fc60d7189b221388f8edf

ImageMagick是开源的,因此您可以获得副本并查看其功能。它将每个图像提升为64位RGBA,然后在生成的像素数组上计算SHA哈希值。请注意,三种无损格式都具有相同的签名,而logo.jpg由于有损编码而具有不同的签名。