"模糊"命令行中的照片元数据?

时间:2017-10-27 18:31:08

标签: image metadata exif exiftool

from Superuser重新发布给其他用户的建议,因为这可能涉及一些(基本的)编程。

当我向社交媒体发布照片时,我经常想模糊部分图像以删除个人身份识别数据。使用任意数量的图像处理工具都很简单。假设我想做与图片元数据大致相同的事情?例如,我想随机扭曲所拍摄的日期和时间,以便有兴趣的人仍然可以大致了解拍摄的时间(日期和时间),并随机倾斜GPS坐标 - 比如说,将它们四舍五入到最近的四分之一英里。我可能会或可能不想删除其他数据,例如相机类型。它不需要精确,只需对元数据进行匿名化,以至于我不会对某些人确切知道我的确切时间和位置感到ick iness。使用EXIFTool执行此操作似乎很简单,但读取,倾斜,然后重写元数据会有点麻烦。不想重新发明轮子,是否有直接的方法来做到这一点?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

你可以用exiftool做到这一点,虽然它需要了解内部工作和Perl的一些知识。

作为一个例子,我会将时间“模糊”10分钟(+/- 5分钟)(好的,技术上它是9分59秒,它有可能落在0):
exiftool -d %s "-DateTimeOriginal<${DateTimeOriginal;$_+=(int(rand(600))-300)}" <FileOrDir>

击穿:
-d %s - 这会将日期格式更改为UNIX时间,即1970:01:01 00:00:00之后的秒数 -DateTimeOriginal< - 要复制到的标记,可能与要复制的标记相同。小于标志<表示标签复制操作 ${DateTimeOriginal;$_+=(int(rand(600))-300)} - 使用exiftools高级格式化功能(也称为Perl代码)从一些更改复制的标记。由于-d选项,此DateTimeOriginal标记值采用UNIX时间格式。然后,生成0到599之间的随机数int(rand(600)),减去300以将其拆分,使得略多于一半为负,其余为正(或0)。使用默认变量$_并将其添加到生成的数字+=

要模糊GPSLatitudeGPSLongitude,你会做类似的事情,使用小数点坐标而不是度/分/秒,以及更小的数字,因为即使是十分之一度也可以是多英里。在这种情况下,命令的重要部分类似于
"-GPSLatitude<${GPSLatitude#;$_+=(rand()-.5)/10}"
在这里,我使用标签#GPSLatitude,因为它会给出小数点坐标值。另一种选择是使用-c选项。我还把它带到了改变水平的第100个小数,我认为可能在英里或数十英里范围内。这将在赤道和子午线附近严重破坏,因为它没有正确考虑到半球。

把它们放在一起:
exiftool -d %s "-DateTimeOriginal<${DateTimeOriginal;$_+=(int(rand(600))-300)}" "-GPSLatitude<${GPSLatitude#;$_+=(rand()-.5)/10}" "-GPSLongitude<${GPSLongitude#;$_+=(rand()-.5)/10}" <FileOrDir>

此命令可创建备份文件。添加-overwrite_original以禁止创建备份文件。添加-r以递归到子目录。如果此命令在Unix / Mac下运行,则反转任何双/单引号以避免bash解释。