2

我想递归比较目录中的屏幕截图文件。我尝试使用cmp,但它总是返回差异 - 即使图像在视觉上没有不同 - 我猜文件中的差异必须是日期last changedlast modified日期。

有没有办法我只能比较图像文件的像素内容而忽略这些标题?

4

2 回答 2

4

如何使用 ImageMagic 软件套件 ( http://www.imagemagick.org ) 中的比较。适用于 mac 和所有现代 Linux 发行版。

我不太熟悉比较图像,但我尝试创建一些示例并运行以下片段,

$ compare -identify -metric MAE same1.png same2.png null
>> same1.png[0] PNG 640x400 640x400+0+0 8-bit DirectClass 1.64KB 0.010u 0:00.009
>> same2.png[0] PNG 640x400 640x400+0+0 8-bit DirectClass 1.64KB 0.010u 0:00.000
>> 0 (0)

$ compare -identify -metric MAE same1.png diff.png null
>> same1.png[0] PNG 640x400 640x400+0+0 8-bit DirectClass 1.64KB 0.010u 0:00.020
>> diff.png[0] PNG 640x400 640x400+0+0 8-bit DirectClass 6.01KB 0.000u 0:00.009
>> 209.225 (0.00319257)

它似乎按预期工作。

希望有帮助!

编辑,DigitalTrauma 的好点,不同格式/压缩算法之间的比较可能是一个问题,

$ compare -identify -metric MAE same1.png same2.xcf null
>> same1.png[0] PNG 640x400 640x400+0+0 8-bit DirectClass 1.64KB 0.080u 0:00.040
>> same2.xcf[0] XCF 640x400 640x400+0+0 8-bit DirectClass 2.73KB 0.070u 0:00.030
>> 0 (0)

$ compare -identify -metric MAE same1.png same2.bmp null
>> same1.png[0] PNG 640x400 640x400+0+0 8-bit DirectClass 1.64KB 0.010u 0:00.010
>> same2.bmp[0] BMP 640x400 640x400+0+0 8-bit DirectClass 768KB 0.000u 0:00.000
>> 0 (0)

$ compare -identify -metric MAE same1.png same2.jpg null
>> same1.png[0] PNG 640x400 640x400+0+0 8-bit DirectClass 1.64KB 0.010u 0:00.019
>> same2.jpg[0] JPEG 640x400 640x400+0+0 8-bit DirectClass 3.65KB 0.000u 0:00.009
>> 0.196766 (3.00245e-06)

因此,当与 jpeg 进行比较时,我们会发现差异,即使图片“看起来”相同。这绝对不是我的领域,但我认为将图片转换为相同的格式不会有任何区别,因为压缩(或任何使图片不同的东西)已经应用于图像。

$ convert same2.jpg same2-from-jpg.png
$ compare -identify -metric MAE same2.png same2-from-jpg.png null
>> same2.png[0] PNG 640x400 640x400+0+0 8-bit PseudoClass 256c 1.38KB 0.040u 0:00.020
>> same2-from-jpg.png[0] PNG 640x400 640x400+0+0 8-bit DirectClass 1.64KB 0.010u 0:00.000
>> 0.196766 (3.00245e-06)

上面我们把jpg转回png再和原图对比,还是有区别的。

无论如何,也许这会给你一些见解。在处理图片时,我绝对可以推荐 ImageMagick。

于 2013-10-26T22:59:00.663 回答
2

我发现以下 OSX 软件可以通过图像内容识别重复图像:

pdiff 肯定会在 bash 脚本中工作。其余的更面向 GUI,但也可能具有命令行界面。

于 2015-02-19T07:16:13.933 回答