我记得去年帮朋友处理一个纠纷,对方发来一张照片说是某天拍的,结果我用Windows右键属性一看,拍摄日期是空的。当时我就懵了,后来才知道微信发图会自动抹掉EXIF。从那以后我就跟图片信息杠上了,前后试了不下十个工具,从手机APP到命令行,踩了一堆坑。今天不写那种'十大神器'的套话,就说说我实际用下来哪些真能打,哪些是花架子。
首先说最基础的EXIF,这玩意儿全称Exchangeable Image File Format,就是相机在按下快门时塞进JPEG里的一堆标签。比如我的老佳能6D,拍出来有光圈F4、快门1/200、ISO 400,还有GPS坐标精确到小数点后6位。但注意,不是所有图片都有,截图没有,微信传输的九成没有。想查看的话,Windows自带属性只能看个日期和相机型号,字段少得可怜。我推荐ExifTool,Phil Harvey写的,现在版本12.40,命令行一敲 exiftool -a -u -g1 你的图.jpg,能列出上百个字段,连'镜头序列号'这种冷门的都有。不过它没图形界面,新手得记命令,我当初就敲错了好几次。
如果你不想碰命令行,在线网站比如exifdata.com也能用,但有个坑:上传的图片会被压缩,有时候EXIF直接丢了。我实测一张原图3.2MB,上传后变成800KB,拍摄时间还在,但GPS没了。手机APP方面,Android的Exif Viewer by Fluntro还行,能看直方图,但免费版有广告。iOS的Metapho要花18块,我买了,发现它导出时会重新编码,等于破坏原数据。所以我的建议是:真要处理重要照片,老老实实用ExifTool,或者Python的PIL库,from PIL import Image; img = Image.open('x.jpg'); print(img._getexif()),虽然笨但不会丢数据。
但EXIF只是图片信息的冰山一角。现在更狠的是语义信息,也就是图片里到底画了啥。比如Google Lens,你扔一张图进去,它能识别出 landmarks、商品、文字。我试过拍一罐可乐,它直接给出品牌和卡路里。还有Tesseract OCR,开源免费,版本5.3.0,装好后 tesseract image.png output -l chi_sim 就能提取中文,但手写体识别率大概只有60%,印刷体能到95%。我拿它扫过发票,数字基本对,但汉字会串行。这里有个独立观点:很多人把图片信息等同于EXIF,其实EXIF只能证明'这台相机在某个时间按了快门',不能证明'照片没被改过'。我用Hex编辑器改过一张图的拍摄时间,再用ExifTool读,完全一致。所以法庭上拿EXIF当证据,基本是笑话。
最后说个我最近才搞明白的事:图片信息其实分两层——物理层和语义层。物理层是元数据,容易被抹掉或篡改;语义层是像素内容,反而更难伪造。比如你用PS改个日期,EXIF能同步改,但光影关系可能露馅。所以我现在查图片信息,都是先看EXIF有没有,再用Google反向搜图看有没有更早的版本,最后用OCR读文字。这套组合拳下来,一张图的前世今生基本能摸清。如果你也有被图片信息坑过的经历,欢迎来吐槽,反正我是折腾够了。