如何从图像文件中删除元数据

如何从图像文件中删除元数据

[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.pngb.pngc.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

因此它们是重复的。

相关内容