JPEG・WebP・AVIF、同じ画質設定でどれだけファイルサイズが違うか実測した

JPEG品質50で圧縮した画像
JPEG 品質50(110,628バイト)
JPEG品質90で圧縮した画像
JPEG 品質90(1,500,400バイト)
WebP品質50で圧縮した画像
WebP 品質50(146,466バイト)
AVIF品質50で圧縮した画像
AVIF 品質50(79,968バイト)

測定条件

2000×1500pxのグラデーション+ノイズのテスト画像(PNG、228,922バイト)を用意し、画像圧縮アプリが実際に使用しているエンコーダ(@jsquash/jpeg・@jsquash/webp・@jsquash/avif、いずれもMozJPEG・libwebp・libaomをWebAssembly化したもの)で品質50・75・90の3段階でエンコードし、出力バイト数を計測した。

測定結果

JPEGは品質50で110,628バイト、品質75で238,339バイト、品質90で1,500,400バイトになった。WebPは品質50で146,466バイト、品質75で230,202バイト、品質90で624,536バイト。AVIFは品質50で79,968バイト、品質75で239,069バイト、品質90で778,270バイト。

品質50の時点でAVIFが最小(79,968バイト)になり、JPEGの110,628バイト、WebPの146,466バイトを下回った。一方、品質90ではJPEGが1,500,400バイトと最も大きくなり、元のPNG(228,922バイト)より大きくなった。品質の数値スケールは形式間で共通ではなく、同じ「90」という数字でも、形式によって圧縮率は大きく異なる。

目標サイズ自動機能の実際の動き

画像圧縮アプリの「目標サイズを指定する」機能は、二分探索で目標以下に収まる最大品質を探す。同じテスト画像に対して目標500KB(512,000バイト)を指定して実行したところ、8回の試行でJPEG品質81(503,070バイト)に収束した。試した品質は54→77→79→80→81→82→88→100の順で、最大試行回数(8回)に達した時点で目標を満たす最良の結果を採用する設計になっている。