跳转至

文件 metadata 清除器

什么时候用得上

Metadata 是什么那篇提到,照片里带着拍摄时间、相机型号与 GPS 坐标。上传照片前先去 EXIF,是任何人现在就能做的低成本防护。

问题在于怎么去。在线的清除工具几乎都要先把文件传上去,而会需要清 metadata 的人,通常最不该把原始文件交出去。页面在你的浏览器里处理,文件不离开设备,清完的是新的一份,原始文件留着不动。

三种常见的处境:

  • 刚搬到新住处,想传一张照片给朋友报平安:手机拍照默认会把 GPS 坐标写进文件里。朋友看到的是一张照片,有心找的人看到的是一组坐标。传出去之前清一次,画面完全不受影响。
  • 在社会运动现场或事故现场拍了画面要投稿给媒体:照片里的拍摄时间与坐标合起来,指得出是谁在什么时候站在哪里。清掉之后编辑台收到的还是同一张图。
  • 要寄出陈情书、举报信或简历的 PDF:作者字段常留着你电脑里的账号名称,制作软件那一栏会写出操作系统与版本。正文改过名字,字段里的旧数据还在。

拿掉 metadata 只处理文件里看不到的字段。画面中的门牌、路标、制服、窗外景色都在影像本身,清完照样看得见,分享之前要自己看过一遍。

支持哪些文件

格式 拿掉的东西 影像数据
.jpg EXIF、XMP、IPTC 与 Photoshop 字段、注释 一个比特都没动
.png EXIF、文本字段、修改时间 一个比特都没动
.webp EXIF、XMP 一个比特都没动
.gif 注释、应用程序扩展(动画的循环设置留着) 一个比特都没动
.mp4 .mov 用户数据区、编码器名称、轨道处理器名称 一个比特都没动
.pdf 标题、作者、制作软件、时间、XMP 整份重写,见下方说明

前面五种格式把描述字段整段拿掉,压缩过的影像或音视频数据不动。PDF 做不到同样的保证,理由见下方「PDF 没办法保证无损」。

其他格式目前不支持,文末列出清单与替代做法。遇到认不出来的文件,画面上会列出错误,不会静静地交还一份没有处理过的东西。

拿掉什么,留下什么

照片文件里,影像本身跟描述用的字段分开存放。描述字段整段拿掉,影像数据不受影响。

拿掉 里面是什么
EXIF 拍摄时间、相机型号、GPS 坐标,还有一张没被裁切过的缩略图
XMP Adobe 系列软件写的描述,常含地点与作者
IPTC 与 Photoshop 字段 说明、作者、关键词
注释字段 文件里夹带的任意文本
修改时间 上次存盘的时间
留着 为什么
色彩描述文件(ICC Profile) 拿掉的话颜色会偏,内容多半是 sRGB 这类标准设置,识别力低
色彩转换标记 印刷用的 CMYK 文件少了它,颜色会反过来
基本兼容信息 少了它有些看图程序会显示警告
影像本身 拿掉就解不开或变样

EXIF 里没被裁切过的缩略图要单独提。你把照片裁掉一半再传出去,缩略图可能还是原本的完整画面。

画面上会逐项列出这次拿掉与留下的东西,每一项标着它在文件格式里的代号与占用大小。

清完的图跟原图完全一样

页面不重新编码。影像与音视频数据从文件里的固定位置开始照抄,解出来跟原文件完全相同。

重新编码的工具做不到无损。每一次重新压缩都会损失画质,而且输出用的是那套函数库的默认压缩参数,跟相机原本写进去的不一样,比对量化表就看得出来,等于换上另一种可辨识的痕迹。

无损也表示清完之后文件通常只小一点点。一张 630 KB 的照片清掉完整的 EXIF 之后是 629 KB,少掉的 140 个字节就是原本记着相机型号与坐标的地方。

清完之后会实际打开一次

清好的文件会在浏览器里实际加载一次再交给你。视频会等到时长读得出来为止,那是改坏视频最典型的症状。程序要是把文件改坏了,加载这一步会拦下来并且列出原因,不会让你拿着一份打不开的照片离开。

视频是一样的道理

手机拍的视频跟照片一样会记录拍摄地点、设备型号与时间,而且更难察觉,因为多数人不会去看视频的属性。

MP4 与 MOV 是一层包一层的结构,描述字段住在其中一层,整段拿掉不需要碰压缩过的音视频数据,跟照片是同一种做法。

三个地方会被清掉:

  • 用户数据区(user data atom):标题、作者、拍摄地点坐标、设备型号
  • 编码器名称与版本:指得出你用什么软件或哪一款手机处理过
  • 轨道的处理器名称:不同平台写法不同,等于一个平台指纹

有一种痕迹清不掉

编码器会把自己的版本写进压缩数据本身。该字符串属于音视频数据本身,位置跟画面内容混在一起,跟描述字段不同。

要清掉只能重新编码,而重新编码会损失画质,也只是把旧编码器的痕迹换成新的。页面不做这件事,会把扫到的字符串列在处理结果里。

PDF 是另一种处理方式

照片与视频可以直接把某一段剪掉,PDF 不行。PDF 每个对象在文件里的位置都记在交叉引用表(cross-reference table)上,拿掉一段之后后面全部位移,整张表要重算。PDF 1.5 之后常见的做法还会把好几个对象压进同一段压缩数据,从外面连内容都读不到。

解析与重写交给 pdf-lib(MIT 授权,授权全文),原封不动放在 utils/vendor/ 底下。要拿掉哪些字段则在页面这边指定。

清掉的是:

  • 文档标题、作者、主题、关键词
  • 制作这份文档的软件,该栏常含操作系统与版本。用浏览器打印成 PDF 的话,里面会是完整的浏览器标识字符串
  • 创建与修改时间
  • XMP 描述区,地点、作者与编辑历史都可能记在里面

拿掉引用不等于拿掉内容

把文档目录里指向 XMP 的引用删掉之后重新存盘,该段内容仍然完整留在文件里,只是没有东西指向它。用文本搜索工具打开还是找得到作者跟地点。要真的清掉必须把对象本身从文档里移除,页面就是这样处理的。

PDF 没办法保证无损

PDF 整份是重写的,做不到照片与视频那种一个比特都没动的保证。

实测上页面内容不会重新排版,渲染出来的画面跟原文件逐像素相同。但如果你的 PDF 有表单、数字签名或特殊的交互元件,重写之后不一定完全保留。重要的文件先留一份原始文件。

不支持的格式

HEIC/HEIF:iPhone 默认拍出来就是这个格式,容器结构复杂得多,页面还做不到。在 iPhone 上可以到「设置 → 相机 → 格式」选「最兼容」,之后拍的就是 JPEG。已经拍好的可以用 AirDrop 或邮件传给自己,过程多半会转成 JPEG。

TIFF、RAW、MKV、WebM、AVI 与 Office 文档目前也不支持。

不做的事

不做面部模糊。面部模糊需要人脸检测模型,跟清除 metadata 是完全不同的一件事,也不该用同一个工具的名义混在一起。

PDF 里的注释与附件各自可能带着作者与时间,页面只处理文档层级的描述字段,遇到带注释的文件会在处理结果里标出来。

离线可用

跟这一区其他工具一样,程序存进设备之后断网也能用,那就是文件没有偷偷送出去最直接的证明。

要把这一页带着走,见离线阅读