将from Superuser重新发布给其他用户的建议,因为这可能涉及一些(基本的)编程。
当我向社交媒体发布照片时,我经常想模糊部分图像以删除个人身份识别数据。使用任意数量的图像处理工具都很简单。假设我想做与图片元数据大致相同的事情?例如,我想随机扭曲所拍摄的日期和时间,以便有兴趣的人仍然可以大致了解拍摄的时间(日期和时间),并随机倾斜GPS坐标 - 比如说,将它们四舍五入到最近的四分之一英里。我可能会或可能不想删除其他数据,例如相机类型。它不需要精确,只需对元数据进行匿名化,以至于我不会对某些人确切知道我的确切时间和位置感到ick iness。使用EXIFTool执行此操作似乎很简单,但读取,倾斜,然后重写元数据会有点麻烦。不想重新发明轮子,是否有直接的方法来做到这一点?谢谢你的帮助。
答案 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)。使用默认变量$_
并将其添加到生成的数字+=
。
要模糊GPSLatitude
和GPSLongitude
,你会做类似的事情,使用小数点坐标而不是度/分/秒,以及更小的数字,因为即使是十分之一度也可以是多英里。在这种情况下,命令的重要部分类似于
"-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解释。