我有一套回归测试,可以自动从我的iPhone应用程序中截取屏幕截图。
我正在使用Imagemagick将屏幕截图与保存的参考屏幕截图进行比较。
简单地:
$ compare -metric AE new.png ref.png diff.png
0
但是,屏幕的某些区域对此测试不感兴趣,我想忽略它们(例如:菜单面板,状态图标等)。
我想在我的参考图像中删除这些区域。理想情况下,最简单的说,我只是在我不想比较的区域周围绘制透明块。
但我如何告诉imagemagick忽略那些透明区域?
这会提取出alpha区域并为其他地方生成透明和白色的BLACK:
$ convert ref.png -alpha extract ref_mask.png
更好的是,这会使alpha为白色,而其他所有内容为黑色:
$ convert ref.png -alpha extract -negate ref_mask.png
我可以将该面具与比较结合起来吗?
非常感谢
答案 0 :(得分:4)
您的想法是在参考图像中使用透明度来掩盖感兴趣的区域。您需要使用bash
进程替换来解决此问题 - 从而使命令的输出看起来像另一个命令的文件。所以你想diff
两个文件的前三行,你会这样做:
diff <(head -3 file1) <(head -3 file2)
并且两个head
中的两个<(...)
命令的输出看起来都像file
到diff
。
所以,使用ImageMagick,你需要这样的东西:
compare -metric AE <(convert input.png ref.png -compose copy-opacity -composite png:) ref.png diff.png
因此,首先查看<()
中的部分。它说取文件input.png
并将其透明度替换为参考图像ref.png
的透明度。然后,结果被强制为PNG
类型并写在stdout
上。然后convert
命令实际上看到了这个:
compare -metric AE <file containing masked input.png> ref.png diff.png
这是我的ref.png
(请勿尝试使用此实际图片,因为我已经人工制作棋盘以显示SO的透明度)
和b.png
和c.png
所以,如果我运行这些,我会得到这个:
compare -metric AE <(convert b.png ref.png -compose copy-opacity -composite png:) ref.png diff.png
0
compare -metric AE <(convert c.png ref.png -compose copy-opacity -composite png:) ref.png diff.png
3245
也就是说,b.png
与参考图像相同,因为蓝色方块位于透明区域。
答案 1 :(得分:1)
看看ImageMagick 比较 documentation,您可以将compare命令与标志一起使用
-extract geometry //extract area from image
答案 2 :(得分:-3)
这是一个用于在持续集成中比较图像的软件。 它允许您(使用UI)选择应该比较图像的哪些部分。