图床上的图我一直用 WebP,手机默认拍 HEIC,设计稿导出偶尔拿到 AVIF,这两年又多了个 JPEG XL。四个格式的底层编码完全不是一回事,压缩效率、浏览器支持和专利成本也不一样。

JPEG XL 是什么

JPEG XL 简称 JXL,是一个正经的国际标准,编号 ISO/IEC 18181,由 JPEG 组织主导。它不是什么公司的私有格式。

来路是几个方案合出来的。谷歌做过一个叫 PIK 的格式,目标是高画质加快速解码;另一支团队基于 FLIF 做了 FUIF。这两个方案 2018 年一起提交给 JPEG XL 的征集,后来合成现在这个格式,PIK 和 FUIF 本身都停了。

有损无损都能做,同一套编码器,想要小体积用有损,一点不丢用无损,不用在两个格式之间来回切。

无损转码这条我特别喜欢。JXL 是 JPEG 的超集,可以把现有的 JPEG 重新压一遍,体积小大概 20%,还是无损可逆的,能完整还原回原来的 JPEG。

渐进解码是先给一张低分辨率预览,再逐层细化;JPEG 是按扫描行从上往下刷,网速慢的时候只能看到半张图。HDR、动画、alpha 透明这些基本也都有。JPEG XL 官方文档说,同样画质下能比 JPEG 小 30% 到 50%。

支持情况这几年一直在变

JXL 的麻烦出在浏览器支持上,格式本身没多少争议。

2023 年 Chrome 110 把 JXL 移除了,当时的说法是使用量撑不起维护成本,社区挺不满。

后来事情又反转。今年 10 月 6 号 Chrome 官方发博客,宣布 Chrome 155 开始正式支持 JXL 解码。解码器换成了 Rust 写的 jxl-rs。145 到 154 那几版要开 flag,155 起默认开。

Firefox 从 158 开始支持,Safari 一直是部分支持,Edge 还没动。

两年前只有 Safari 能勉强打开,现在 Chrome 和 Firefox 都跟上了。

https://caniuse.com/jpegxl

版本支持

AVIF、WebP、HEIF 的来路

另外三个的共同点,都是从视频编码里借来的。

WebP 基于 VP8,2010 年就有了,是这四个里最早的。有损无损、动画、透明都支持,压缩比 JPEG 和 PNG 好。兼容性最好,老客户端也能直接解。

AVIF 基于 AV1,比 WebP 晚很多,压缩效率更好。浏览器支持已经铺开。这两年在网页上用得越来越多。

iPhone 默认就拍 HEIC,它的正式名字是 HEIF,基于 HEVC。压缩率不错。但网页上基本用不起来,HEVC 的专利授权复杂且贵,浏览器厂商不愿意承担。目前只有 Safari 17 以上支持,Chrome、Firefox、Edge 全都不支持。

一张表

格式 基于 Chrome Firefox Safari Edge
JPEG XL 自有(PIK+FUIF) 155+ 158+ 17+ 部分 未支持
AVIF AV1 85+ 93+ 16.4+ 121+
WebP VP8 32+ 65+ 16+ 18+
HEIF/HEIC HEVC 不支持 不支持 17+ 不支持

表里的版本号是我写这篇时的状态。

怎么选

网页上的图片,我现在还是 WebP 为主。AVIF 压缩比 WebP 好一截,主流浏览器也基本都支持,是眼下性价比最高的选择。JXL 在 Safari 只是部分支持、Edge 还没动,做网页图不用急着上。

照片归档和长期保存,JXL 更合适。尤其无损转码那条:我电脑里存了一堆老 JPEG,用 JXL 重压一遍能省 20% 空间,还无损可逆,哪天想还原随时能还原。这种活儿 AVIF 干不了。

iPhone 默认就拍 HEIC,接着用最省事。麻烦在发给安卓或 Windows 的朋友,对方可能打不开,我需要发出去的时候会手动转成 JPEG。

要最大兼容性,就用 WebP。我手上那些老设备、还有几个不太守规矩的客户端,WebP 都能直接开。

我自己的做法是:本地照片库拿 JXL 转码省空间,手机拍的 HEIC 就留着,网页那边 WebP 先不动。