在shell脚本中,我想检查两个PNG图像是否不同,即图像的大小不同,或者一个图像的至少一个像素与另一个图像的相应像素具有不同的RGBA。
对两个图像文件进行散列将不起作用,因为图像可能被不同地压缩或具有不同的注解,或者可能两个像素完全透明但RGB分量不同,等等。
我知道如何使用ImageMagick的convert
工具检查文件大小是否不同。至于比较像素值,我想到使用ImageMagick的compare
工具,但如果命令成功处理,退出代码总是0:http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=22451
什么样的命令行测试可以用来比较两个PNG图像的像素是否相等?或者也许有一种方法可以使用compare
?
4条答案
按热度按时间iyr7buue1#
找到一种允许未压缩RGBA的图像格式,转换两个文件,然后比较输出。
tkqqtvp12#
你不应该使用ImageMagick比较的退出代码。所有的说明都是比较函数成功退出,没有错误。你想报告比较的AE度量,它会告诉你有多少像素是不同的。或者使用其他度量,如MAE或RMSE。
这将返回一个值给终端,即计数。
例如:
65100个像素不同
您可以将其返回给变量,如下所示:
ImageMagick将其输出写入stderr,因此我添加了2〉&1
请参阅
https://imagemagick.org/script/compare.phphttps://imagemagick.org/Usage/compare/显示器
23c0lvtd3#
使用ImageMagick和grep的另一种方式
虽然该方法依赖于ImageMagick是installed,并且比CMP更重,但是可以更容易地扩展以允许容差等。
提示
display -version
是测试ImageMagick是否已安装的快速方法。如果您不想写入磁盘,也可以将这些命令通过管道连接在一起。
mnowg1ta4#
在Ubuntu的idiff软件包openimageio-tools上做了我所需要的:
返回值根据差异而变化。