文件 metadata 清除器¶
什么时候用得上¶
Metadata 是什么那篇提到,照片里带着拍摄时间、相机型号与 GPS 坐标。上传照片前先去 EXIF,是任何人现在就能做的低成本防护。
问题在于怎么去。在线的清除工具几乎都要先把文件传上去,而会需要清 metadata 的人,通常最不该把原始文件交出去。页面在你的浏览器里处理,文件不离开设备,清完的是新的一份,原始文件留着不动。
三种常见的处境:
- 刚搬到新住处,想传一张照片给朋友报平安:手机拍照默认会把 GPS 坐标写进文件里。朋友看到的是一张照片,有心找的人看到的是一组坐标。传出去之前清一次,画面完全不受影响。
- 在社会运动现场或事故现场拍了画面要投稿给媒体:照片里的拍摄时间与坐标合起来,指得出是谁在什么时候站在哪里。清掉之后编辑台收到的还是同一张图。
- 要寄出陈情书、检举信或简历的 Word 文件或 PDF:作者字段常留着你电脑里的账号名称,制作软件那一栏会写出操作系统与版本,Word 文件还记着公司名称、模板文件名与总编辑时间。正文改过名字,字段里的旧数据还在。
拿掉 metadata 只处理文件里看不到的字段。画面中的门牌、路标、制服、窗外景色都在影像本身,清完照样看得见,分享之前要自己看过一遍。画面里的东西要盖掉,用截图遮蔽。
跟截图遮蔽什么时候该用哪一个,在二手平台卖东西用十四张待上架的照片说明。收到别人给的文件要先看清楚里面带着什么,见收到来源给的文件。
支持哪些文件¶
| 格式 | 拿掉的东西 | 影像数据 |
|---|---|---|
.jpg |
EXIF、XMP、IPTC 与 Photoshop 字段、注释 | 一个比特都没动 |
.png |
EXIF、文本字段、修改时间 | 一个比特都没动 |
.webp |
EXIF、XMP | 一个比特都没动 |
.gif |
注释、应用程序扩展(动画的循环设置留着) | 一个比特都没动 |
.mp4 .mov .m4a |
用户数据区、编码器名称、轨道处理器名称 | 一个比特都没动 |
.mp3 |
ID3v2 与 ID3v1 标签、APE 标签 | 一个比特都没动 |
.wav |
INFO 列表、广播波形描述、iXML、XMP、ID3 | 一个比特都没动 |
.docx .xlsx .pptx |
文档属性(作者、公司、时间、修订次数、模板)、自定义属性、缩略图、部件时间戳、夹带图片的 EXIF | 正文一个字都没动 |
.pdf |
标题、作者、制作软件、时间、XMP | 整份重写,见下方说明 |
照片、视频与录音把描述字段整段拿掉,压缩过的影像、影音或声音数据不动。Office 文档是清空描述用的部件,正文所在的部件照抄。PDF 做不到同样的保证,理由见下方「PDF 没办法保证无损」。
其他格式目前不支持,文末列出清单与替代做法。遇到认不出来的文件,画面上会列出错误,不会静静地交还一份没有处理过的东西。
拿掉什么,留下什么¶
照片文件里,影像本身跟描述用的字段分开存放。描述字段整段拿掉,影像数据不受影响。
| 拿掉 | 里面是什么 |
|---|---|
| EXIF | 拍摄时间、相机型号、GPS 坐标,还有一张没被裁切过的缩略图 |
| XMP | Adobe 系列软件写的描述,常含地点与作者 |
| IPTC 与 Photoshop 字段 | 说明、作者、关键词 |
| 注释字段 | 文件里夹带的任意文本 |
| 修改时间 | 上次存盘的时间 |
| 留着 | 为什么 |
|---|---|
| 色彩描述文件(ICC Profile) | 拿掉的话颜色会偏,内容多半是 sRGB 这类标准设置,识别力低 |
| 色彩转换标记 | 印刷用的 CMYK 文件少了它,颜色会反过来 |
| 基本兼容信息 | 少了它有些看图程序会显示警告 |
| 影像本身 | 拿掉就解不开或变样 |
EXIF 里没被裁切过的缩略图要单独提。你把照片裁掉一半再传出去,缩略图可能还是原本的完整画面。
画面上会逐项列出这次拿掉与留下的东西,每一项标着它在文件格式里的代号与占用大小。
清完的图跟原图完全一样¶
页面不重新编码。影像与音视频数据从文件里的固定位置开始照抄,解出来跟原文件完全相同。
重新编码的工具做不到无损。每一次重新压缩都会损失画质,而且输出用的是那套函数库的默认压缩参数,跟相机原本写进去的不一样,比对量化表就看得出来,等于换上另一种可辨识的痕迹。
无损也表示清完之后文件通常只小一点点。一张 630 KB 的照片清掉完整的 EXIF 之后是 629 KB,少掉的 140 个字节就是原本记着相机型号与坐标的地方。
清完之后会实际打开一次¶
清好的文件会在浏览器里实际加载一次再交给你。视频与录音会等到时间长度读得出来为止,那是改坏影音最典型的症状。Office 文档没有东西可以加载,改成整份读回来,每个部件的长度与校验码都要对得上。程序要是把文件改坏了,这一步会拦下来并且列出原因,不会让你拿着一份无法打开的文件离开。
视频是一样的道理¶
手机拍的视频跟照片一样会记录拍摄地点、设备型号与时间,而且更难察觉,因为多数人不会去看视频的属性。
MP4 与 MOV 是一层包一层的结构,描述字段住在其中一层,整段拿掉不需要碰压缩过的音视频数据,跟照片是同一种做法。
三个地方会被清掉:
- 用户数据区(user data atom):标题、作者、拍摄地点坐标、设备型号
- 编码器名称与版本:指得出你用什么软件或哪一款手机处理过
- 轨道的处理器名称:不同平台写法不同,等于一个平台指纹
有一种痕迹清不掉¶
编码器会把自己的版本写进压缩数据本身。该字符串属于音视频数据本身,位置跟画面内容混在一起,跟描述字段不同。
要清掉只能重新编码,而重新编码会损失画质,也只是把旧编码器的痕迹换成新的。页面不做这件事,会把扫到的字符串列在处理结果里。
录音文件也一样¶
MP3 的标签住在文件头(ID3v2)与文件尾(ID3v1、APE),中间是一连串音帧。标签整段拿掉,音帧照抄。ID3v2 里除了标题与演出者,常有录音软件的名称与封面图。
WAV 是跟 WebP 同一种 RIFF 容器。描述字段在 INFO 列表(演出者、软件、日期、注释)与广播波形描述(bext:制作者、制作日期与时间、编码历程)里,录音机与剪辑软件写进去的 iXML 与 XMP 也在同一层。这几段拿掉,fmt 与 data 照抄。
M4A 跟 MP4 是同一种容器,走视频那一条路。
编码器(LAME、Xing)把自己的信息写进第一个音帧,那属于声音数据本身,跟视频的情况相同,扫到会列在处理结果里。
Office 文档¶
Word、Excel 与 PowerPoint 的文件是一个 zip,里面是一堆 XML 部件。描述字段住在三个部件里:core.xml 记着作者、最后修改者、创建与修改时间、标题与修订次数,app.xml 记着制作软件与版本、公司、模板文件名与总编辑时间,custom.xml 是组织自己加的字段,例如文档编号或承办人。正文在另外的部件里,一个字都不动。
三个部件是清空,不是删掉。zip 里另外两份清单记着有哪些部件,删掉一个要同步改两份,漏一份 Word 会说文件损坏。换成空的根元素,结构完全不变,所有字段在规范里本来就是选填。文档缩略图是例外,图片没有「空」的写法,那一个真的删,连同两份清单里指向它的那几行。
另外两个容易漏的地方也一起处理:
- zip 里每个部件自己带着时间戳。Word 写的是 1980 年 1 月 1 日,LibreOffice 写的是真的保存时间,全部改成前者。
- 夹在文档里的图片照样带 EXIF。从手机相册拖进 Word 的照片,GPS 座标跟着进了文件。每一张都拿出来走一次上面照片的流程,清完再放回去。
批注、修订记录与备注不动¶
这三样是正文的一部分,每一则都带着作者名称与时间,这一页不碰正文,扫到会列在处理结果里。要清掉,在编辑软件里删除所有批注、接受或拒绝全部修订,保存之后再清一遍。
ODT、ODS 这类 OpenDocument 格式结构不同,目前不支持。
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、FLAC、OGG 与 OpenDocument(ODT、ODS)目前也不支持。
不做的事¶
不做面部模糊。面部模糊需要人脸检测模型,跟清除 metadata 是完全不同的一件事,也不该用同一个工具的名义混在一起。
PDF 里的注释与附件各自可能带着作者与时间,页面只处理文档层级的描述字段,遇到带注释的文件会在处理结果里标出来。
离线可用¶
跟这一区其他工具一样,程序存进设备之后断网也能用,那就是文件没有偷偷送出去最直接的证明。
要把这一页带着走,见离线阅读。