我有一组回归测试,这些测试会自动从我的iPhone应用程序中获取屏幕快照。
我使用Imagemagick来比较截图和保存的参考截图。
简单地说:
$ compare -metric AE new.png ref.png diff.png
0但是,屏幕上的某些区域对此测试并不感兴趣,我想忽略它们(例如:菜单面板、状态图标等)。
我想在我的参考图像中空白这些区域。理想情况下,也是最简单的情况下,我只是在我不想比较的区域周围画出透明的块。
但是,我怎样才能让想象者忽略那些透明的区域呢?
这将提取alpha区域,并生成透明的黑色和其他的白色:
$ convert ref.png -alpha extract ref_mask.png更好的办法是使阿尔法变成白色,使其他一切变成黑色:
$ convert ref.png -alpha extract -negate ref_mask.png我能把面具和比较结合起来吗?
非常感谢
发布于 2014-10-27 09:27:30
你是在正确的轨道上,你的想法,使用透明度,在你的参考图像,以掩盖感兴趣的领域。您需要使用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和参考图像是一样的,因为蓝色方块位于透明区域。
发布于 2013-12-14 11:30:41
查看ImageMagick compare 文档,您可以使用comand和标志
-extract geometry //extract area from image发布于 2014-10-26 23:14:13
看看视觉CI
这是一个用于连续集成比较图像的软件。它允许您(使用UI)选择应该比较的图像的哪些部分。
https://stackoverflow.com/questions/20582620
复制相似问题