[OP编辑#1:事实证明,exiftool 创建者/维护者 Phil Harvey 在一篇文章中很好地回答了这个问题ExifTool 论坛上的重复主题]
[由OP编辑#2:从Exif工具常见问题解答:Exif工具是不是保证在尝试删除所有元数据时从文件中完全删除元数据。请参阅“编写器限制”。]
我想在旧硬盘中搜索当前备份驱动器上没有的照片。格式包括jpg、png、tif等...,以及各种raw格式(不同相机型号和制造商)。
我只对图像本身的唯一性感兴趣,而不是由于 exif 标签的值、给定 exif 标签本身的存在/不存在、嵌入的缩略图等方面的差异而产生的唯一性......
尽管我不希望在其他相同图像的不同副本之间发现任何损坏/数据腐烂,但我想检测到这一点,以及由于调整大小和颜色变化而导致的差异。
[由OP编辑#3:澄清一下:一小部分误报是可以容忍的(文件不是唯一的,则被认为是唯一的),而误报是非常不受欢迎的(文件被错误地认为是重复的)。]
我的计划是在剥离任何和所有元数据后根据 md5sum 识别唯一性。
如何剥离元数据?
就exiftool -all= <filename>
足够了?
答案1
和imagemagick
包装和不仅适用于 JPEG你可以简单地:
mogrify -strip ./*.jpg
这./
是为了避免以“-”开头的文件名出现问题。
从手动的:
-strip
去除图像中的任何配置文件、注释或这些 PNG 块:bKGD、cHRM、EXIF、gAMA、iCCP、iTXt、sRGB、tEXt、zCCP、zTXt、日期。
很多更多信息和注意事项这里。
这与 @grochmal 类似,但更直接和简单。
答案2
jhead
能够从 JPEG 文件中删除非图像元数据。手册页说:
-dc
从 JPEG 标头中删除注释字段。请注意,注释不是 Exif 标头的一部分。
-de
完全删除 Exif 标头。保持其他元数据部分完好无损。
-di
删除 IPTC 部分(如果存在)。保持其他元数据部分完好无损。
-dx
删除 XMP 部分(如果存在)。保持其他元数据部分完好无损。
-du
删除 jpeg 中非 Exif、非注释以及其他对图像无贡献的部分 - 例如 Photoshop 可能在图像中留下的数据。
-purejpg
删除渲染图像不需要的所有 JPEG 部分。去除各种应用程序可能留在图像中的任何元数据。
-de
-dc
和选项的组合-du
。
答案3
这有点老了,但是,exiftool 工作得很好。
显示元数据
exiftool photo.jpg
显示所有 *.jpg 文件的元数据
注意:扩展名是区分大小写。
exiftool -ext jpg
与上面相同,但包括子目录。
exiftool -r -ext jpg .
删除所有元数据
exiftool -all= -overwrite_original photo.jpg
删除当前目录中所有 *.jpg 文件的所有元数据
exiftool -all= -overwrite_original -ext jpg
与上面相同,但包括子目录。
exiftool -all= -r -overwrite_original -ext jpg .
删除当前目录中 *.jpg 文件的所有 GPS 元数据
exiftool -gps:all= *.jpg
答案4
使用 ImageMagick 代替 MD5identify
来打印签名图像文件。查找具有相同签名的文件。共享签名的文件具有相同的内容。
例如,文件a.png
、b.png
和c.png
是不同的,因为它们具有不同的 MD5 校验和:
$ md5sum *
a9ee60d8237a4b3f6cdd6e57c24b1caf a.png
e8661c4fd7761984a74945e273fd4d09 b.png
21c808d62ff9c7675c1f9ca20d2f6578 c.png
然而,他们有一个共同的签名:
$ identify -format "%# %f\n" *
1c916332636b91704f212eec504c25383c90ed5d1659975a4a5895c48fe80ab8 a.png
1c916332636b91704f212eec504c25383c90ed5d1659975a4a5895c48fe80ab8 b.png
1c916332636b91704f212eec504c25383c90ed5d1659975a4a5895c48fe80ab8 c.png
因此它们是重复的。