2012 年,有个通缉犯在逃亡期间接受采访,一张随手拍的照片发到了网上。照片的 EXIF 里带着 GPS 坐标,精度足够定位到具体建筑。几天后他在那个位置附近被捕。这是个被讲烂了的例子,但它十几年后依然有效——因为默认设置基本没变,大多数人的手机今天仍然在往照片里写坐标。

这篇不讲原理,讲清单:一张图片里可能藏了什么,哪些场景会泄露出去,发布前怎么检查。

元数据的三个层

"一张照片里到底藏了多少信息:EXIF、XMP 和生成器字段" — visual 1
元数据的三个层

图片文件里的附加信息主要分三块,它们各自独立,清理时容易漏掉其中一块。

EXIF是相机厂商定的老标准,存在 JPEG 的 APP1 段里,用 TIFF 的 IFD 结构组织。拍摄参数、设备信息、GPS 都在这里。

XMP是 Adobe 推的 XML 格式元数据,也在 APP1(不同的标识符),或者在 PNG 的 iTXt 块里。编辑软件、版权信息、关键词标签、评级,以及现在很多 AI 工具的生成参数都往这里塞。XMP 的问题在于它是可扩展的,任何软件都可以往里加自定义命名空间的字段,所以能出现什么很难穷举。

IPTC是新闻行业的标准,图片说明、作者、机构、地点描述这类。跟 XMP 有大量重叠,很多软件同时写两份。

三层各写各的,删了 EXIF 不代表 XMP 干净。见过不少"已清理"的图片,EXIF 空了,XMP 里的 photoshop:AuthorsPositiondc:creator 还在。

可能藏在里面的东西

"一张照片里到底藏了多少信息:EXIF、XMP 和生成器字段" — visual 2
可能藏在里面的东西

GPS 坐标GPSLatitude / GPSLongitude / GPSAltitude,还有 GPSImgDirection(拍摄时镜头朝向)。手机 GPS 在开阔环境下精度到几米。如果你在家里拍了张猫,坐标就是你家。有些手机还会写 GPSDateStamp,配合坐标能还原出行轨迹。

时间DateTimeOriginal(按快门的瞬间)、CreateDateModifyDate,还有时区偏移字段。三个时间对不上能看出后期加工过;时区能暴露你在哪个国家。

设备Make / Model 是相机或手机型号。这个本身不算敏感,但配合下面这条就不同了。

序列号SerialNumber(机身)和 LensSerialNumber(镜头)。这两个字段很多人不知道存在。机身序列号是全球唯一的,意味着你用同一台相机拍的所有照片——不管发在哪个平台、用什么账号——都能被串成同一个人。如果这台相机是你实名购买或送修过的,链条可以一路连到身份。专业摄影师尤其要注意这条。

软件与系统Software 字段可能是 "Adobe Photoshop 26.2 (Windows)" 或 "iOS 18.4"。暴露你的工作流和设备环境,也是指纹的一部分。

作者与版权ArtistCopyright、XMP 里的 dc:creatordc:rights。很多人在相机里设过一次名字就忘了,之后每张照片都带着真名。

缩略图——这条最值得单独说。EXIF 里嵌了一张小尺寸预览图,早期不少软件在裁剪图片后只更新主图,不更新 EXIF 缩略图。结果就是:你把照片里不想让人看到的部分裁掉发出去了,但 EXIF 里那张几百像素的缩略图还是未裁剪的原始画面。这类事故实际发生过,包括一些涉及私密内容的案例。现在主流软件基本修了这个 bug,但老工具、某些手机自带编辑器、以及一些在线裁剪服务未必。不确定的时候,把缩略图一起删掉最省事。

AI 生成字段。这几年多出来的一类。Stable Diffusion 系工具习惯把完整参数写进 PNG 的 tEXt 块(键名常见 parameters),里面有正向提示词、负向提示词、种子、采样器、模型名和哈希、CFG 值。商业 AI 服务通常写 XMP 或 C2PA 断言,字段包括生成器名称、模型版本、有时也含提示词。你的提示词可能是你花时间调出来的,也可能包含你不想公开的描述——它默认就在文件里,任何人下载后都能读。

哪些渠道会剥离,哪些不会

这个表决定了你什么时候需要动手清。

通常会剥离(平台在处理时重新编码图片,元数据顺带没了):

  • 微信朋友圈、微博、小红书的常规图片发布
  • X(Twitter)、Instagram、Facebook 的图片上传
  • 大部分论坛和 CMS 的图片上传(走了缩略图生成流程的)

注意"通常"两个字。平台的图片处理策略会变,不同上传路径(App / 网页 / API)行为也可能不一样。而且剥离不等于平台自己没存——他们在服务端读过原始文件。

通常不会剥离

  • 微信的"原图"发送。这是最常见的翻车点。勾了原图,元数据原封不动送到对方手里。
  • 网盘分享链接(百度网盘、Google Drive、Dropbox 都是原文件)
  • 邮件附件
  • GitHub 仓库里的图片、issue 附件
  • Telegram 的"文件"方式发送(发成图片会压缩,发成文件不会)
  • 自建网站上直接放的图片
  • AirDrop、蓝牙、U 盘拷贝
  • 大多数图床和 CDN 的直传

规律很简单:任何"保持原文件"的传输路径,元数据都在

发布前的自检流程

给一个能实际执行的顺序:

1. 先看一眼里面有什么。 别凭感觉。Windows 上右键属性里的"详细信息"能看到一部分但不全;macOS 预览的"显示简介"同理。要看全的话用支持完整字段读取的工具。重点确认:有没有 GPS、有没有序列号、有没有作者名、缩略图跟主图是不是一致。

2. 判断需不需要留。 摄影作品要版权信息,那 CopyrightArtist 就该留;商品图什么都不用留;应聘作品集看情况。别无脑全删,也别无脑全留。

3. 清理。 关键是要三层一起清——EXIF、XMP、IPTC,外加 PNG 的文本块和可能存在的 C2PA 清单。只删 EXIF 是最常见的漏网方式。

4. 清完再验一次。 用另一个工具读一遍确认。清理这件事的好处是它完全可验证——字段要么在要么不在,没有"可能还残留"的模糊地带。这跟像素域水印是两回事,那个删不掉也测不准。

5. 别忘了文件名。 IMG_20260714_家里_客厅.jpg 这种,清了元数据也白搭。相机的默认命名有时也带序号规律。

几条源头设置

事后清理不如一开始就不写:

  • 手机关定位权限。iOS 在 设置 → 隐私与安全性 → 定位服务 → 相机,选"永不"。Android 在相机 App 设置里找"位置标签"之类的开关。关了以后拍的照片不再带坐标,但已经拍好的照片不受影响,那些还得单独处理。
  • iOS 分享时可以在分享面板顶部点"选项",关掉"所有照片数据",这样通过系统分享出去的图会去掉位置和部分元数据。方便但不彻底。
  • 相机里的作者/版权字段如果设过,进菜单看一眼当前值是什么。很多人设的是真名。
  • AI 生图工具大多有关闭元数据写入的选项,在设置里翻一翻。

最后说个前提:这些操作的目的是让你知道自己发出去的是什么,而不是伪造来源。元数据这一层是确定的、可控的、可验证的,把它管好,你的隐私边界就清楚了一大半。至于那些藏在像素里、藏在云端指纹库里的东西,SynthIDC2PA 两篇里讲了它们的边界在哪。

文档也一样会漏,而且漏得更尴尬——简历里的作者名写着前公司的模板,这种事天天在发生。