图片信息怎么看、怎么删:从 EXIF 查看工具到批量清除 GPS 的实测记录

关键词:图片信息怎么看,EXIF查看工具,图片元数据删除,ExifTool教程,照片GPS定位

摘要:图片信息分文件层、拍摄层、内容层三层,本文用 ExifTool 和 Pillow 实测 EXIF 查看、批量删除 GPS 与序列号、以及上传平台后元数据丢失的真实原因,附可复制命令。

图片信息怎么看、怎么删:从 EXIF 查看工具到批量清除 GPS 的实测记录

图片

大概是三年前,我在闲鱼上卖一台二手微单,随手用手机翻拍了相机的背面照发上去。有个买家私信我,问快门数大概多少。我当时就愣了一下——照片里根本拍不到快门数,那台机器的菜单也早就重置过了。

后来我才反应过来,他看到的不是照片里画的东西,而是照片本身携带的「图片信息」。用 ExifTool 一查,我那台相机拍的图里,Model、LensModel、DateTimeOriginal、SerialNumber 全在,连机身序列号都躺着。从那之后我把自己硬盘里三万两千多张图扫了一遍,踩的坑比想象中多得多。

图片信息其实是三层,大多数人只关心中间那层

第一层是文件层的:格式、像素尺寸、文件大小、色彩空间、位深。这层不用工具,右键属性就能看个大概。

第二层是拍摄层的 EXIF。这是被讨论最多的。一张 iPhone 拍的 HEIC 大约 2.5–4MB,EXIF 里能塞进上百个标签;同一台机器导出的 JPEG 往往是 5–7MB。最常被翻出来的几个字段:Make(厂商)、Model(机型)、FNumber(光圈,手机常写 f/1.78)、ExposureTime(快门,1/120 秒会被记成 0.008333)、ISO、FocalLength(手机物理焦距常是 6.86mm,再配一个 FocalLengthIn35mmFilm=24 换算成等效焦距)。

第三层是内容层,也就是图上到底画了什么——人脸、车牌、门牌号、屏幕上的聊天记录。这层不靠元数据,靠图像识别,Google Lens、TinEye、百度识图干的都是这一层。很多人以为「删了 EXIF 就安全」,其实图片背景里一个快递单号,比 GPS 坐标更容易把你卖了。

图片

把这三层分清楚,后面的操作才有意义。

查看工具:系统自带够用,但别用在线网站

Windows 资源管理器里选中文件 → 右键 → 属性 → 详细信息,能看到相机型号、光圈、快门、ISO、焦距,部分字段还能直接改。macOS 用访达选中文件按 Cmd+I,或者预览 App 里按 Cmd+I,会多显示一行 GPS 坐标。

但这两家都不显示完整的 GPS 和序列号。要全量看,还是得 ExifTool。Phil Harvey 这个工具我从 2018 年用到现在,Windows 版解压出来改名成 exiftool(-k).exe,双击就能停在命令行不关闭。

# 看一张图的全部信息,包括厂商私有标签
exiftool IMG_20240315_142207.jpg

# 只看经纬度,-n 输出十进制度数而不是度分秒
exiftool -n -GPSLatitude -GPSLongitude -GPSAltitude photo.jpg



![图片](http://img1.baidu.com/it/u=3698027196,2148603175&fm=253&fmt=auto&app=138&f=JPEG?w=180&h=315)


# 递归扫描整个目录,捞出所有带 GPS 的照片
exiftool -r -if '$GPSLatitude' -p '$Directory/$FileName' ~/Pictures

第三条命令我用了一整个晚上,扫出一千一百多张带坐标的图,最早一张是 2016 年在老家门口拍的。那一刻的感觉不太舒服。

在线 EXIF 查看网站我劝你别用。原理上是把你的原图完整上传到别人的服务器再解析,图片本身和里面的 GPS 都过去了。为了看个光圈值把家庭住址交出去,不划算。

上传之后信息为什么少了一半

最常被问的问题是:我明明拍了带 GPS 的照片,发到平台上怎么查不到了。

原因基本有三个。第一是平台重编码。你上传一张 4MB 的 JPEG,服务器转成 WebP 或压到 300KB,这个过程里元数据通常被整体丢弃——它占空间又没用。

图片

第二是格式转换。HEIC 转 JPEG 的时候,很多转换工具只搬运 IFD0 那一层,而 GPS 存在单独的 GPS IFD 里,很容易被漏掉。我自己写脚本转过一批,200 张里有 40 多张的 GPS 是空的,就是这个问题。(Python 里读 GPS 得用 img.getexif().get_ifd(0x8825),直接 getexif() 只能拿到 IFD0。)

第三是 JPEG 的结构限制。EXIF 存在 APP1 段里,一段最大 65535 字节,实际可用 64KB 左右。有些相机往里塞了大量厂商私有标签和大尺寸缩略图,一旦超了,后面的信息会被截掉,表现就是「前面几个字段在,后面的没了」。

顺带说一句,微信发原图到底保留多少 EXIF,我自己测过几个版本,结果并不一致,GPS 有时在有时不在。所以别把聊天软件当隐私开关,它顶多算个随机的。

删什么、留什么,我现在的做法

全删(exiftool -all= -overwrite_original *.jpg)最简单,但我不推荐无脑用。因为 ICC 色彩配置文件也经常挂在元数据里,全清之后同一张图在手机和显示器上颜色会不一样,尤其 Adobe RGB 拍的,删了配置会明显发灰。

我现在的规则是:发到公开平台的照片,删 GPS、删机身序列号、删镜头序列号、删作者和版权里的联系方式;保留色彩配置、Orientation、拍摄时间和基本曝光参数。

图片

# 保留色彩配置和曝光,只摘掉定位和序列号
exiftool -GPS:all= -SerialNumber= -LensSerialNumber= -Artist= -Copyright= \
         -overwrite_original *.jpg

# 顺手按拍摄时间重命名,排序就正常了
exiftool '-FileName<DateTimeOriginal' -d %Y%m%d_%H%M%S%%-c.%%e *.jpg

第二条命令里的 %%-c 是重名时加 -1、-2 后缀,不加的话同秒连拍的照片会互相覆盖。我第一次跑没加,丢了两张,还好有备份。

两个容易忽略的坑:方向和时间

Orientation 这个标签值只有 1 到 8。1 是正常,3 是转了 180°,6 和 8 是竖拍最常见的两个值。手机拍照时传感器方向是固定的,靠这个标签告诉显示端「该转 90°」。你要是删了 EXIF 又没做物理旋转,照片在电脑上是躺着的,在手机上又是正的,两边显示不一样,人就会很懵。

用 Python 处理的话,Pillow 有现成的:

图片

from PIL import Image, ImageOps
img = Image.open("a.jpg")
img = ImageOps.exif_transpose(img)   # 按 Orientation 把像素真正转正

还有时间。EXIF 的 DateTimeOriginal 格式长这样:2024:03:15 14:22:07,注意年月日之间是冒号不是短横线。更麻烦的是它默认不带时区,只有 EXIF 2.31 之后加的 OffsetTimeOriginal 字段才存 +08:00。所以相机拍完导到电脑,经常出现时间差 8 小时,就是因为读取端默认按 UTC 去解释了。

我现在的习惯是,导入 Lightroom 或者 Photos 之前先确认一次相机的时区和日期,设置一次,省后面几百张的麻烦。

最后

图片信息本质上就是「照片自己写的日记」。它记录的不只是你按快门那一秒的参数,还有你在哪、用什么设备、什么时候。你分享出去的从来不只是图像本身,是图像加日记。

知道它在哪、怎么翻、怎么改,比一味删干净更有用。