我正在使用grunt进行我的测试床设置,目前它会为给定的测试用例生成大量的屏幕截图,然后将这些屏幕截图与我已经使用graphicsmagick存储在不同存储库中的基准进行比较。但是不同版本的linux(CentOS和Ubuntu)之间的屏幕截图似乎存在细微差别,其中屏幕截图验证在Ubuntu上传递,但在CentOS上,只有一个屏幕截图与1e-9的大小不同,因为我的测试案件失败。
在使用gm compare时有没有办法,我可以为图像比较指定一个阈值,所以只有当差异超过阈值时我们才会抛出错误,否则不会?我一直在浏览graphicsmagick教程,但还没有能够做到这一点。有什么指针吗?
我使用以下代码进行图像比较:
gm.compare(screenshot1, screenshot2, options, function (err, isEqual, equality, raw) {
assert(!err,filename + ' is different');
equality.should.be.exactly(0);
if err done(err);
})
原始值是一个字符串,它具有标准化的RGB差异和总差异。我可以控制阈值的其他任何选项,如果差异小于阈值,则相等为零?
答案 0 :(得分:1)
docs状态
您可能希望传递自定义容差阈值以增加或减少默认级别0.4。
gm.compare('/path/to/image1.jpg', '/path/to/another.png', 1.2, function (err, isEqual) {
...
})
您还可以在options
- 对象
var options = {
file: '/path/to/diff.png',
tolerance: 1.2
}
编辑:因为它似乎不起作用,如果它在你自己的范围内(任意阈值),你可以将等式向下舍入:
gm.compare(screenshot1, screenshot2, options, function (err, isEqual, equality, raw) {
var threshold = 0.0001;
equality = equality < threshold ? 0 : equality;
assert(!err,filename + ' is different');
equality.should.be.exactly(0);
if err done(err);
})
答案 1 :(得分:1)
只是因为我对这个问题感到不安,所以&#34;宽容&#34;选项有点不清楚。如果输出“等于”等等。任何不完全相同的图像上的回调参数你会得到一个非零值(其中零是完全匹配),但即使是非常不相似的图像也会是非常小的值(我有一个2000像素高的精灵表,而不是微小的256x256图像和相等值为0.12)。
容差是多少,它是isEqual回调参数返回true或false的级别,因为它与equality参数有关。
因此,如果您想确定您所比较的图像完全相同,请将公差设置为0
gm.compare('/path/to/image1.jpg', '/path/to/another.png', 0, function (err, isEqual) {
...
})
如果您不需要它们完全相同但只是关闭,请忽略阈值并输出相等性以确定您的阈值供以后使用。