JPEG、WebP、AVIF之外:为什么我建议你重新认识BMP和TIFF
过去五年我测试了上百种图片压缩组合,从Photoshop的“存储为WebP”到ffmpeg的AVIF硬编。但我渐渐发现一个尴尬事实:我们太迷恋压缩率,以至于忘了图片首先是信息载体。前几天我整理旧硬盘,翻出2003年用老数码相机拍的BMP照片,单张15MB,分辨率只有1600×1200。重新看那些文件时,我意识到今天的手机拍的所谓“无损”HEIC,在信息保真度上其实没赢多少。当然不是让你回到BMP时代,而是想说:每种格式都有自己的位置,只是被营销和习惯掩盖了。
先看BMP。它没有压缩算法,或者说只有RLE这种几乎没人用的老古董。一个1920×1080的24位BMP,大小正好是1920×1080×3 + 54字节头 ≈ 5.93MB。你可以用计算器按出来,文件头每字节都固定。这种“笨拙”带来两个好处:一是解码完全不消耗CPU,嵌入式设备上跑BMP比跑JPEG快三倍以上;二是像素值就是原始采样值,做图像处理算法、医学影像、工业检测时不会引入有损压缩的振铃效应。我去年做个条码缺陷识别项目,换用BMP存储摄像头原始帧后,误检率从0.7%降到0.2%。代价是每帧多存2MB,但对工业相机来说硬盘几乎不要钱。
再看TIFF。很多人以为TIFF只是打印店用的,但你没注意到它内部可以封装多种压缩算法,甚至支持LZW、DEFLATE等无损压缩。一幅300dpi、A4尺寸、灰度8bit的扫描文件,原始大小约2480×3508×1 ≈ 8.7MB,用LZW压缩后通常到4-5MB,能完整保留每个像素的灰阶过渡。最让我震惊的是最近我扫描了一批上世纪90年代的胶片底片,用TIFF存储48bit色深,暗部居然能拉回三级曝光而不出现色带。同样素材存成JPEG(哪怕质量95),暗部一拉就断层。至于WebP和AVIF,它们追求的是视觉等价而不是数据等价。AVIF在相同SSIM下可能比JPEG小30%-50%,可一旦你对照片做二次调色、局部提亮、AI放大,被抛弃的频域信息就永远找不回来了。
但别误会,我不会否定新格式。我日常修图导出网络分享,首选AVIF(用cavif编码器,默认quality 45左右,4K照片能压到500KB-1MB)。我的观点是:存储策略必须是分层的。原片(RAW或TIFF)归原片,分发格式归分发格式。现在手机默认HEIC就是大问题——它兼顾了压缩和画质,但兼容性太差,而且很多云服务会偷偷转成JPEG。更合理的做法是:拍摄时同时保存一张高压缩率的DNG(RAW)和一张全尺寸WebP(无损模式)。WebP无损支持alpha通道,压缩率比PNG低20%左右,解码速度也不错。对于截图和UI素材,我也建议直接用无损WebP替代PNG,体积小,而且Chrome和Firefox原生支持。
最后说个实操经验。昨天我用ImageMagick把一张10MB的PNG截图转成无损WebP,出来是6.8MB;又用cwebp改成有损quality 80,瞬间降到700KB——人眼根本看不出差别。但如果你要拿这张图去打印店输出,哪怕300DPI下,有损格式也会让你后悔。所以我的建议很直接:先想清楚图片最终会被“看”还是被“用”。“看”的话随便压缩,AVIF、JPEG XL都可以;“用”的话,尤其是会二次处理、裁剪、调色、做分析,请老老实实存BMP或TIFF。我们总以为自己在追求“高清”,其实更多时候是在追求“文件小”。这两件事,在新格式的狂欢里被偷偷调包了。