“清理 EXIF” 听起来一个按钮的事,深入看其实是一组不同深度的操作。理解元数据的多层结构和各平台的真实剥离行为,能避免”以为清干净了,但还是泄漏”的尴尬。
图片里到底有几套元数据
JPG / PNG / HEIC 文件里可能并存多套元数据,主流五种:
| 名称 | 标准 | 典型内容 | 谁会写入 |
|---|---|---|---|
| EXIF | TIFF/Exif 2.32 | 拍摄时间、相机型号、GPS、ISO、光圈 | 相机、手机 |
| ├ MakerNote | 厂商私有(嵌在 EXIF 里) | 设备 UUID、相机序列号、镜头 ID | 相机厂商 |
| IPTC | IPTC IIM | 标题、版权、作者、关键词 | 编辑软件、CMS |
| XMP | Adobe XMP | 编辑历史、评分、可重复 EXIF/IPTC 字段 | Lightroom / Photoshop |
| ICC | ICC profile | 色彩空间 / 色域 | 任何渲染工具 |
| Photoshop IRB | PS 私有 | 图层信息、切片、历史 | Photoshop |
只清 EXIF 不动其他几套是大多数工具的”半成品方案”。XMP 完全可以独立携带 GPS 坐标——一张 JPG 的 EXIF GPS 被清,但 XMP 里的 <exif:GPSLatitude> 还在,敏感信息照样泄漏。
缩略图里的二级 EXIF
JPG 文件里常嵌入一张缩略图(160×120 左右)用于相机预览。这张缩略图自己也是一张完整 JPG,可以有自己的 EXIF。
经典翻车:
- 主图被裁剪后保存,缩略图没更新——还能从缩略图反推未裁剪前的内容
- 主图 EXIF 被清,缩略图的 EXIF 没清——GPS 还在
- 主图换成马赛克,缩略图未马赛克——敏感画面仍可见
完整清理必须同时删除缩略图——单独删主图 EXIF 不够。本工具勾选”清 EXIF / 相机参数”时会整段移除 APP1,缩略图(嵌在该段内)随之消失。
各平台的剥离深度
下表汇总了主流平台对元数据的常见处理结果(社区实测口径,平台行为可能随版本变化):
| 平台 | EXIF | IPTC | XMP | GPS | 缩略图 EXIF | 重新编码 |
|---|---|---|---|---|---|---|
| 微信朋友圈(图片) | 部分清 | 清 | 清 | 清 | 清(重新生成) | 是 |
| 微信聊天图片(默认压缩) | 大部分清 | 清 | 清 | 清 | 清 | 是 |
| 微信聊天 - 以文件 | 不清 | 不清 | 不清 | 保留 | 保留 | 不重编 |
| 微博 | 部分清 | 清 | 清 | 清 | 清 | 是 |
| 部分清 | 清 | 清 | 清 | 清 | 是 | |
| 小红书 | 部分清 | 清 | 部分清 | 清 | 清 | 是 |
| 邮件附件 | 不清 | 不清 | 不清 | 保留 | 保留 | 不重编 |
| 各家网盘”原图” | 不清 | 不清 | 不清 | 保留 | 保留 | 不重编 |
| Telegram(普通发送) | 部分清 | 清 | 清 | 清 | 清 | 是 |
| Telegram(“以文件发送”) | 不清 | 不清 | 不清 | 保留 | 保留 | 不重编 |
结论:
- 任何”以文件发送”通道都不清——邮件、聊天软件的文件传输、网盘原文件
- 图片模式发送的社交平台基本清干净——但保留拍摄设备型号、软件版本等非敏感字段
- 特别敏感场景请先本地清后再发
清理工具对比
| 工具 | 平台 | 清 EXIF | 清 XMP | 清 IPTC | 缩略图 | 无损 |
|---|---|---|---|---|---|---|
| Mac 预览(删 GPS) | macOS | 仅 GPS | ✗ | ✗ | ✗ | 否 |
| Windows 右键属性 - 删除属性 | Windows | 部分 | ✗ | ✗ | ✗ | 否(重编) |
| iPhone 分享 - 隐藏所有数据 | iOS | ✓ | 部分 | ✗ | ✓ | 否 |
| ImageOptim | macOS | ✓ | ✓ | ✓ | ✓ | 是 |
| jhead -purejpg | 命令行 | ✓ | ✓ | ✓ | ✓ | 是 |
| exiftool -all= | 命令行 | ✓ | ✓ | ✓ | ✓ | 是 |
| 本工具 | 浏览器 | ✓ | ✓ | ✓ | ✓ | 是 |
Mac 预览和 Windows 资源管理器的”删除属性”是最弱的清理——只清部分字段,常被误以为”已清”。要彻底清理选无损工具,或上传到剥离力度强的社交平台。
无损 vs 重编
清理 EXIF 有两种实现:
- 无损(字节级删除):定位 JPEG / PNG 的元数据段,移除字节。像素数据完全不变。
- 重编(解码 + 重新编码):解 JPEG → 拿到像素 → 重新编码 JPEG。像素经过一次量化损失。
普通照片重编一次质量损失肉眼难见,但反复清理会累积损失。专业工作流应该只清一次,且无损清理。
JPEG 元数据结构:
0xFF 0xD8 // SOI 标记
0xFF 0xE1 [length] "Exif\0\0"... // APP1 段,含 EXIF + 缩略图
0xFF 0xE1 [length] "http://..."... // APP1 段,含 XMP(也用 APP1)
0xFF 0xED [length] "Photoshop"... // APP13 段,含 IPTC
0xFF 0xE2 [length] "ICC_PROFILE".. // APP2 段,含 ICC
...
0xFF 0xDA ... // SOS,开始扫描数据(像素)
0xFF 0xD9 // EOI 标记
无损清理就是跳过 APP1 / APP13 等元数据段,直接拼接 SOI + 量化表 + DHT + SOS。本工具走这条路径——按勾选的项分别决定要不要复制 APP1(EXIF / XMP)、APP2(ICC)、APP13(IPTC / Photoshop)等段,像素扫描数据原样保留。
旋转方向要不要保
EXIF 里有一个 Orientation 字段告诉解码器”图像应该顺时针转 90° / 180° / 270° 才正”。iPhone 横拍后这个字段可能写”6”(顺时针 90°)。
把整个 EXIF 段一刀切掉,会让横拍照片变成竖的(或反之)——这是清完后图片”变方向”的高频原因。
两种处理:
- 保留 orientation 字段:其他都清,单留这个字段——画面方向不变,元数据基本干净
- 物理旋转 + 清空 orientation:根据 orientation 实际旋转像素,然后写 orientation = 1(不旋转)。代价是要解码 + 重编码,JPEG 不再是字节级无损
本工具默认走第 1 条(保留旋转方向,无损清理其余元数据),保证清完后画面方向不变;如果需要彻底剥掉所有 EXIF(接受可能的方向反转),可以关掉”保留旋转方向”选项。
一句话总结
清 EXIF 不等于清干净——XMP / IPTC / 缩略图 / MakerNote 同样能泄漏;走”以文件发送”等于完全没清;选无损工具一次到位。