为什么你的图片看起来总是脏脏的?
上周整理硬盘,翻出一张2016年用老微单拍的日落。原片是14bit RAW,当时导出成JPEG发到朋友圈,觉得颜色还挺好。这次没事干,把那张JPEG拖进PhotoShop里拉了一下色阶,好家伙,天空直接变成了一圈一圈的等高线地图。我第一个反应是相机坏了,后来才意识到——是当年为了省空间,在导出设置里把品质拉到了7,色深默认8bit。更蠢的是,我还开了「转换为sRGB」的选项,然后微信又二次压缩了一遍。现在这张图,随便找个色板对比,几乎看不出当日傍晚的紫红色,只剩下一种均匀的、灰不溜秋的蓝。
后来我花了几个晚上,把几组同一场景的JPEG、PNG、WebP、AVIF文件拆开看数据。JPEG只有8bit亮度精度,而我的显示器其实是10bit的,这中间本身就差了两档的灰阶过渡。更隐蔽的是量化表——大多数看图软件根本不会显示JPEG内置的量化系数,只有用jpegtran -verbose这种命令才能看到「亮度表」里那些巨大的除数。数值越大,压缩越狠,高频细节丢得就越多。你以为的“画质好”全靠显示器抖动算法在骗眼睛。而AVIF和WebP虽然是新一代格式,但很多导出工具的默认转换设置其实是针对网页加速设计的,锐化过度、色度抽样直接4:2:0,稍微放大看边缘全是彩色溢出的毛刺。
还有一个几乎没人在意的坑:元数据。我拍这张照片的时候,相机在里面塞了GPS坐标、镜头光圈、快门速度、白平衡偏移,甚至还有场景识别和Face Detect信息。结果那天用微信发出去,全部被剥掉了。更离谱的是有一次我用某云相册备份,原图还在,但本地文件夹里的图片莫名其妙多了个-edited后缀,而且文件里的ICC色彩配置被替换成了Display P3——我的笔记本屏幕根本就不是P3色域,看起来颜色反而更淡了。现在我学聪明了,传图前先检查EXIF,用exiftool -all把GPS删掉,然后手动嵌入一个固定sRGB的profile,再去调整亮度。
说实话,我现在越来越觉得,图片信息这件事被严重低估了。大家都盯着分辨率、像素、噪点,却没几个人关心位深、色彩空间、量化表和元数据状态。一张图承载的信息分三层:像素值、色彩语义、拍摄上下文。第一层被压缩算法搞坏,第二层被色彩管理搞混,第三层被社交平台直接删光。我甚至做过一个测试:把一张照片转成16bit TIFF存档,然后分别导出为高质量PNG、WebP和JPEG XL,再用diff脚本对比每个像素的偏差值。结果最接近原片的是JPEG XL,但它在绝大多数手机相册里根本不能预览,WebP虽然兼容性好一点,但很多老软件打开时自动忽略ICC配置文件,直接按默认sRGB渲染,导致色彩偏移。
如果你想让自己导出的图少踩坑,我自己现在的流程是:相机里拍RAW,进Lightroom修完先输出一个16bit TIFF作为母本存档;网络分享的图,先转成8bit但保留完整ICC的PNG,然后用cwebp -near_lossless 60转一份WebP备用,最后用avifenc --min 0 --max 10转AVIF给支持它的地方用。别直接传原图给社交平台,因为你永远猜不到它的压缩管线会怎么折磨你的色彩分层。还有,尽量别用Windows自带图片查看器看P3或Adobe RGB的图,它根本不会做色彩转换,看到的永远是过饱和的假颜色。
也许你会觉得这太麻烦,但想想一张照片的背后,你费了多少心思去调整白平衡和影调。结果上传一次全毁了,那感觉真的像把精心打磨的木器丢进搅拌机。图片信息不只是「分辨率高不高」「噪点多不多」,它是一整套从光到像素再到屏幕还原的契约。你签不签,输出的时候就已经注定了。