画質を落とさずに JPEG のファイルサイズを小さくする方法
大事なディテールを残したまま JPEG を軽くする実践的な手順と、ほとんどのオンラインツールが間違えているエンコーダ設定について解説します。
「画像を圧縮」するツールのほとんどは、同じ黙った取引をしています。色情報の半分を捨てて、気づかれないことを願っているのです。肌の色、赤い花、細い色文字、色の境界が強い写真で結果が見えます。画質スライダーでは直りません。これは画質の問題ではないからです。
JPEG を大きくしているものの正体
JPEG は明るさをフル解像度で、色を低い解像度で保存します。この比率をクロマサブサンプリングと呼びます。
- 4:4:4 — 色もフル解像度。最も忠実で、ファイルは最大。
- 4:2:2 — 色は水平方向に半分の解像度。ほとんどの写真では 4:4:4 と見分けがつきません。
- 4:2:0 — 色は縦横ともに半分。色データの 4 分の 3 が失われます。
多くのカメラや画像生成ツールは 4:4:4 で書き出します。ところが多くのエンコーダは、「Web 用」「圧縮」の JPEG を求められると黙って 4:2:0 に変換します。この変換は不可逆です。画質スライダーが関与する前に、色のディテールはすでに捨てられています。
私たちは生成イラスト 1,195 枚でこれを計測しました。同じ画質のまま 4:4:4 から 4:2:0 に落とすと、最も悪い色チャンネルの SSIM が 0.984 から 0.975 へ下がり、最悪の 1 枚は 0.944 まで落ちました。JPEG の画質を上げても回復しませんでした。
画質の数値はパーセントではない
JPEG の画質 80 は「元の 80%」という意味ではありません。1992 年に定義された量子化ステップ表へのインデックスで、物理的な意味はありません。どちらも画質 80 と名乗る 2 つのエンコーダが、同じ見た目の画質でファイルサイズが 40% 違うこともあります。
写真コンテンツの実用的な範囲:
- q90〜q95 — 並べて比べても元画像と区別できません。
- q80〜q85 — Web での定番。q99 の書き出しより通常 60〜75% 小さくなります。
- q60〜q70 — サムネイルや背景向け。細かいテクスチャは柔らかくなります。
- 50 未満 — グラデーションでブロックノイズが目立ちます。
このツールが違うところ
私たちはファイルに触る前にヘッダーからクロマサブサンプリングを読み取り、そのまま維持します。4:4:4 の画像は 4:4:4 のままです。ほとんどのツールはあなたのファイルが何を使っていたか教えてくれません。私たちは圧縮前にすべての画像で表示します。
また、画質を無駄に使いません。すでに圧縮されたファイル(たとえば以前 q70 で書き出したもの)を q80 で再エンコードすると、見た目は良くならないのにファイルは大きくなります。エンコーダが前回の圧縮の痕跡を記述するためにビットを使うからです。その場合は推測せず可逆パスを実行します。エントロピー符号化を書き直し、画像データはビット単位で同一のままです。ベースライン JPEG では通常 4% ほど小さくなります。
うまくいく手順
- q80 から始め、「元の色サンプリングを維持」を有効にします。
- 空ではなく、色の細部がある場所を 100% で確認します。
- まだ大きい場合は目標サイズモードを使い、本当に必要な上限を設定します(フォーム送信なら 200KB など)。
- 元画像に戻れるなら、圧縮済みファイルを二度圧縮しないでください。
すべてブラウザ内で動作します。画像がアップロードされることはありません。