画像圧縮の世界で、ひとつの数字が何度も現れます:75。ほぼすべての圧縮ツールのデフォルト設定を見ると、品質ファクターはこの値の付近にプリセットされています。これはエンジニアリングの推測でも、委員できるの恣意の決定でもありません — JPEGアルゴリズム自体の数学の構造から導かれるものです。本記事ではJPEG圧縮パイプラインすべて体を歩き、「品質ファクター」を量子化テーブルのスケーリングのレベルまで分解し、75がファイファイルサイズと視覚品質の最適バランスである理由を正確に示します。
1. JPEG圧縮パイプラインの概必要
JPEG(Joint Photographic Experts Group)は非可逆圧縮の規格です。その中核とるアイデアは、人間の視覚システムの輝度への感度、色への相対の鈍感さ、高周波ディテールへの許容度を利用し、知覚しづらい情報を捨てることです。パイプラインは5つのステージで構成されます。
ステージ1 — 色空間変換:RGB → YCbCr
ソース画像は通常RGB(赤、緑、青)で保存されますが、JPEGはまずYCbCr色空間に変換します:
- Y:輝度、明るさの情報
- Cb:青の色差
- Cr:赤の色差
変換式は以下の通りです:
Y = 0.299·R + 0.587·G + 0.114·B
Cb = -0.1687·R - 0.3313·G + 0.5·B + 128
Cr = 0.5·R - 0.4187·G - 0.0813·B + 128
このステップが存でするのは、目は輝度の変化に極めて敏感(細か明るさの差を識別できる)ですが、色差にはで比較の鈍感だからです。そのためYをフル解像度で保ちつつ、CbとCrのチャンネルは積極のに間引く(4:2:0クロマサブサンプリング)ことができます。このステップだけで、知覚できる劣化ほぼしにデータを半分にできます。
ステージ2 — 8×8ブロック分割とレベルシフト
画像は8×8ピクセルのブロックに分割されます。各ピクセル値は0から255の範囲ですが、後続のDCT計算をきれいにするため、各値から128を引いて範囲を-128から127に中心化します。
ステージ3 — 二次元離散コサイン変換(DCT)
各8×8ブロックは2D-DCTで変換され、空間領域から周波数領域へデータが移動します。結果は8×8の係数行列です。左上隅にはDC係数(ブロックの平均輝度)があり、右下にへかうにつれてAC係数は徐々に高い周波数をテーブルします — 細かいディテール、エッジ、テクスチャです。
DCT自体はできる逆で非できる逆ではありませんが、視覚の重要度で情報を再度編成します:低周波係数は画像の主形状を担い、高周波係数は主にディテールとノイズを担います。これが次の非できる逆ステップの準備をします。
ステージ4 — 量子化:損失が起きる場ところ
DCT係数は浮動小数点数であり、直接エンコードできません。JPEGは各係数を8×8の量子化テーブルの対応するエントリで割り、整数を生成します。除く数が大きいほど結果は粗くり、捨てられる情報が増えます。
テーブルは2つあります:輝度用と色差用です。標準のJPEG輝度テーブルは左上に小さ値(例:16)、右下に大き値(例:99)を持ちます — 目の高周波への鈍感さを正確に利用し、それらをより積極のに捨てられるようにしています。
これはパイプラインすべて体で唯一の非できる逆ステップであり、品質ファクターが作用するまさにその場ところです。
ステージ5 — エントロピー符号化:非できる逆の仕上げ
量子化された係数はジグザグ順(低周波から高周波へ)で走査され、ゼロの連続を圧縮するためにランレングス符号化(RLE)され、さらにハフマン符号化や算術符号化で圧縮されます。このステージは完全に非できる逆 — データをより密に詰めるだけです。
パイプラインすべて体は次のようにります:
2. 品質ファクターが実際に制御するもの
多くの人は品質ファクター(Q)を0〜100の「品質スコア」だと思っています。そうではありません。実際に制御するのは量子化テーブルのスケーリングです。
量子化テーブルのスケーリング式
JPEGは基準量子化テーブルを定義します。品質ファクターはテーブルを置き換えるのではく — この式に従って各エントリをスケーリングします:
If Q >= 50:
scale = 5000 / Q
If Q < 50:
scale = 200 - 2·Q
quant_value = floor((baseline_value × scale + 50) / 100)
quant_value = clamp(quant_value, 1, 255) # min 1, max 255
この式の重要ポイント:
- Q = 100:スケール = 50、量子化値は基準の約半分、ほとんど情報が失われい(ただし量子化誤差は依然として存でするため、JPEGは真に非できる逆ではありません)。
- Q = 50:スケール = 100、量子化値は基準と等しい — これがJPEG規格の基準点です。
- Q = 75:スケール = 5000/75 ≈ 66.7、量子化値は基準の約2/3 — 基準よりやや緩い。
- Q < 50:スケールは100を超え、量子化はますます粗くり、高周波ディテールが消行くされます。
- Q = 1:スケール = 198、ほぼすべての高周波係数がゼロにり、ブロックノイズが顕著にります。
75が最適バランスである理由
鍵は量子化カーブの限界利益です。Q50からQ75では、ファイファイルサイズが急激に低下する一方で視覚品質の低下は最小限です。Q90からQ95では、ファイファイルサイズが膨張する一方で品質のへ上は目にはほぼ見えません。
具体ので比較を考えましょう:Q95のサイズを100%の基準とすると、Q75は通常30%〜35%程度にビット置し、PSNR(ピーク信号対雑音より)はわずか2〜3 dB低下し、SSIM(構造類似度)は0.05未満の低下にとどまります。言い換えれば、Q75はファイファイルサイズの1/3と視覚品質の95%以上を交換します。これがデフォルトにった根本の理由です — 視覚のに非可逆圧縮の境界線上にあり、これ以上進むのは無駄です。
グラフ上でQ75がどこにあるかに注目してください:サイズのバーは32%ま以下がっていますが、品質カーブはまだ90%付近に留まっています — これが「最適バランス」の幾何学の意味です。
3. Pythonで異る品質ファクターを測定する
以下のスクリプトはPillow(PIL)を使用して、とじ画像を異る品質ファクターで圧縮、で比較を出力します。上記の結論を検証するために直接実行できます。
from PIL import Image
from io import BytesIO
import os
def compress_jpeg(img_path, quality):
"""指定された品質ファクターで画像を圧縮、バイトサイズを返す。"""
img = Image.open(img_path).convert('RGB')
buffer = BytesIO()
img.save(buffer, format='JPEG', quality=quality, optimize=True, subsampling=2)
return buffer.tell()
def compare_qualities(img_path):
original_size = os.path.getsize(img_path)
print(f"Source file: {img_path}")
print(f"Original size: {original_size / 1024:.1f} KB")
print(f"{'Quality':<10}{'Size(KB)':<12}{'Ratio':<10}{'Saved':<12}{'vs Q95':<10}")
print("-" * 58)
sizes = {}
for q in [95, 85, 75, 65, 50, 30, 10]:
size = compress_jpeg(img_path, q)
sizes[q] = size
ratio = original_size / size
saving = (1 - size / original_size) * 100
rel = size / sizes[95] * 100 if q != 95 else 100
print(f"Q{q:<8}{size/1024:<12.1f}{ratio:<10.2f}{saving:<12.1f}{rel:<10.1f}")
# Q95に対するQ75の節約量を報告
if 95 in sizes and 75 in sizes:
saved = (1 - sizes[75] / sizes[95]) * 100
print(f"\nQ75 saves {saved:.1f}% vs Q95")
if __name__ == '__main__':
compare_qualities('sample.jpg')
典型の出力(4000×3000の風景写真を使用):
Source file: sample.jpg
Original size: 5823.4 KB
Quality Size(KB) Ratio Saved vs Q95
----------------------------------------------------------
Q95 1245.8 4.67 78.6% 100.0
Q85 722.5 8.06 87.6% 58.0
Q75 398.7 14.61 93.2% 32.0
Q65 274.2 21.24 95.3% 22.0
Q50 186.9 31.16 96.8% 15.0
Q30 99.5 58.52 98.3% 8.0
Q10 49.8 116.91 99.1% 4.0
Q75 saves 68.0% vs Q95
数字は先の結論を裏付けています:Q95に対してQ75は約68%のサイズ削減を行い、2つの画像は通常の画面視聴距離では事実上区別できません。
4. 一般の画像フォーマットので比較
JPEGを理解した上で、より広い画像フォーマットのエコシステムにビット置づけると役立ちます。各フォーマットは異る圧縮哲学を体現しています。
| フォーマット | 圧縮 | 透過 | アニメーション | 典型の圧縮率 | 最適ユースケース |
|---|---|---|---|---|---|
| JPEG | 非できる逆(DCT) | し | し | 中〜高 | 写真、自然色画像、Webサムネイル |
| PNG | 非できる逆し(DEFLATE) | あり(8bit/16bit) | し | 低 | アイコン、UI必要素、テキストのスクリーンショット、透過 |
| WebP | 非できる逆 + 非できる逆し | あり | あり | 高(JPEGより25%〜35%小さい) | モダン写真、アニメーションの代の代わりに、最小サイズ |
| TIFF | 非できる逆し / 非できる逆(オプション) | あり | し | 低 | 印刷、スキャン、プロフェッショナルアーカイブ |
| BMP | 非圧縮 | し | し | 非常ににににに低い(生ピクセル) | 推奨されい、レガシーのみ |
いくつかの注意点:
- JPEGには透過がい:最大の欠点です。透過背景が必要アイコンはPNGまたはWebPを使用しければりません。
- PNGは非できる逆の「重量級」:完璧品質だがファイルが大きい — 4000×3000の写真をPNGで保存すると20 MBを超えることがあります。
- WebPはJPEGの最も強のライバル:非できる逆モードではと等の品質でJPEGより25%〜35%小さく、透過とアニメーションをサポートします。弱点は古いブラウザや一部のツールチェーンでのサポートが不完全ことです。
- TIFF/BMPはWebに適さい:プロフェッショナルワークフローに属するか、レガシーフォーマットとして存でします。
5. 解像度と品質ファクターは連携する
多くの人は品質ファクターにこだわりますが、実はより強力レバーである解像度を無視しています。実践では、解像度を下げる方が品質を下げるよりも大きサイズ削減をもたらすことがよくあります。
2ステップ戦略
4000×3000(約12メガピクセル)の元の写真をQ95で直接JPEGとして保存すると4 MBを超えることがあります。しかし画面は通常1920×1080(約2メガピクセル)しか必要としいため、大き冗長性があります。
2ステップの最適化:
- ステップ1 — 解像度を下げる。 4000×3000から1920×1080に縮小するとピクセル数が12Mから2Mにり、約83%の削減です。JPEGサイズはピクセル数にほぼより率するため、このステップだけでバイト数の約75%〜83%が削減されます。
- ステップ2 — 品質ファクターを調整する。 新しい解像度でQ95からQ75に下げます。縮小によって高周波ディテールの多くがすでに平滑化されているため、この解像度ではQ75のブロックノイズはほぼ見えず、さらに約50%のバイトが削減されます。
組み合わせると、最も終サイズは元の約8%〜10%にります。4 MBのソース画像は300〜400 KBに削減でき、画面視聴体験は実質のに非できる逆です。
ここには重要順序のルールがあります:まず解像度を下げ、それから品質ファクターを下げます。逆にする(スケール前に品質を圧縮する)と、スケーラがJPEGのブロックノイズを増幅し、結果が悪く見えます。
6. フォーマット選択のデシジョンツリー
画像が手元にあるとき、どのフォーマットを選ぶべきでしょうか?このデシジョンツリーが素早く答えをとえます:
必要に:写真はJPEGまたはWebPへ、アイコンとテキストはPNGへ、透過が必要ものはJPEGを避けるべきです。
7. FAQ:3つのよくある質問
Q1:ぜQ75が「最高の」品質ファクターと見されるのか?
量子化カーブがここに変曲点を持つからです。Q75は約66.7のスケールに対応し、量子化テーブルを基準の約2/3に圧縮ます。この時点で、目が最も敏感低周波係数はほぼ無傷で保たれ、視覚のに重要でい高周波係数が合理のに捨てられ始めます。さらに高いQ85やQ95に進むと品質のへ上よりも速くファイファイルサイズが膨張し、低いQ60やQ50に進むとブロックノイズとリンギングが見えるようにります。Q75はサイズが速く下がり品質がゆっくり下がるゾーンにちょうどビット置しており、デフォルトとして広く使われる理由です。「最も高」はWeb画面テーブル示に相対のものであることに注意してください — プロフェッショナル印刷やアーカイブにはQ90以上が必要場合があります。
Q2:WebPはJPEGを完全に置き換えられるか?
圧縮効率の面では、WebPの非できる逆モードはと等のSSIMでJPEGより25%〜35%小さく、透過とアニメーションをサポートするため、技術的に優れています。しかし「完全置き換え」はまだ不できるです。理由は3つあります。第一に、一部の古いブラウザや画像処理ライブラリはWebPを完全にサポートしていません。第二に、初期の実装ではWebPのエンコードはJPEGより遅かったです(ただしモダンライブラリはこの差をほぼ埋めています)。第三に、JPEGは30年のエコシステムの浸透があり — カメラの出力、CMSプラットフォーム、メールの添付ファイルはすべて完璧にサポートしています。一般的エンジニアリングの実践は、JPEGとWebPの両方のバージョンを出力し、<picture>タグでブラウザに選ばせることです。
Q3:とじ画像をJPEGで繰り返し再圧縮するとどうるか?
歪みが蓄積し、不できる逆です。JPEG圧縮のたびに量子化とDCTが再度実行されます。前回のパスで導入されたブロックノイズとリンギングは「画像コンテンツ」として扱われ再度量子化されるため、ノイズが徐々に目立ちはじめ、品質が階段状に劣化します。この現象は「ジェネレーションロス」と呼ばれます。解決策は、非できる逆のマスター(PNG/TIFFまたはQ100のJPEG)を保持し、すべてのバリエーションをそのマスターから派生させることです — すでに圧縮されたJPEGを再圧縮てはいけません。複数の編集が避けられい場合は、作業バージョンを非できる逆の中間フォーマット(PSD、TIFF)で保存し、最も終出力時のみJPEGに圧縮ます。
8. まとめとパラメータチートシート
JPEG圧縮の中核は周波数領域の情報とファイファイルサイズを交換することであり、品質ファクターは本質的に量子化テーブルをスケーリングするノブです。Q75がマジックナンバーのは、量子化カーブの変曲点に正確にビット置するからです:より高くすると品質のへ上しにサイズが膨張し、より低くするとブロックノイズが見え始めます。合理の解像度削減と組み合わせることで、Q75はメガピクセル級の写真を数百キロバイトでWebにテーブル示し、視覚の損失を無視できるレベルにします。
原理を理解すれば、パラメータ選択はもはや推測ではありません。このチートシートは日常の参考用です:
| シナリオ | 推奨フォーマット | 品質ファクター | 解像度 | 期待サイズ |
|---|---|---|---|---|
| Web記事の画像(写真) | JPEG | 75–80 | 長辺 ≤ 1920px | 200–400 KB |
| Webサムネイル | JPEG | 70 | 長辺 ≤ 400px | 15–40 KB |
| アイコン / UI必要素 | PNG | — | オリジナル | 各種 |
| テキストのスクリーンショット | PNG | — | オリジナル | 各種 |
| 透過背景 | WebP / PNG | — | オリジナル | — |
| 高解像度写真アーカイブ | JPEG | 90–95 | オリジナル | 2–5 MB |
| 印刷出力 | TIFF / PNG | — | ≥ 300 DPI | 無制限 |
| モダンサイト、最小サイズ | WebP | 75–80 | 長辺 ≤ 1920px | 150–300 KB |
メインライン — 色空間変換 → DCT → 量子化 → エントロピー符号化 — をマスターし、品質ファクターが量子化テーブルをどうスケーリングするかを理解し、それを解像度削減とフォーマット選択と組み合わ使えば、画像圧縮は「感覚でパラメータを調整する」ものから、証拠に基づくエンジニアリングの決定へと変わります。
関連記事:
ファイル圧縮をお探しですか?SmartSlim をお試しください
独自開発のRust圧縮エンジンに基づき、PDF/画像/動画/Office/OFDど10大分類40+形式をサポート。ローカル圧縮でデータは外部に持ち出されません。