文件 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 里的注释与附件各自可能带着作者与时间,页面只处理文档层级的描述字段,遇到带注释的文件会在处理结果里标出来。
离线可用¶
跟这一区其他工具一样,程序存进设备之后断网也能用,那就是文件没有偷偷送出去最直接的证明。
要把这一页带着走,见离线阅读。