Graphicsmagick图像比较阈值

时间:2015-02-20 04:38:56

标签: gruntjs graphicsmagick centos7

我正在使用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差异和总差异。我可以控制阈值的其他任何选项,如果差异小于阈值,则相等为零?

2 个答案:

答案 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) {
      ...
})

如果您不需要它们完全相同但只是关闭,请忽略阈值并输出相等性以确定您的阈值供以后使用。

相关问题