JPEG形式の深掘りガイド:仕組み・画質・圧縮・運用方法

概要:JPEGとは何か

JPEG(Joint Photographic Experts Group)は、写真や自然画像の圧縮に広く使われている画像ファイル形式です。正式にはISO/IEC 10918-1(ITU-T T.81)で規定され、主に損失圧縮を行う「Baseline(標準)JPEG」が普及しています。特徴は高い圧縮率と広い互換性で、ウェブ、デジタルカメラ、スマートフォンなどで事実上の標準となっています。

JPEGの基本構造とファイルフォーマット

JPEGファイルは多数の「マーカー」セグメントで構成されます。代表的なマーカーには以下があります。

  • SOI(Start Of Image): ファイルの開始(0xFFD8)
  • APP0(JFIF)やAPP1(EXIF): メタデータやフォーマット識別子
  • SOF(Start Of Frame): 画素フォーマットやサンプリング情報
  • DQT(Define Quantization Table): 量子化テーブル
  • DHT(Define Huffman Table): ハフマンテーブル
  • SOS(Start Of Scan): スキャンデータの開始
  • EOI(End Of Image): ファイルの終了(0xFFD9)

一般的に、カメラやエディタはEXIF(APP1)に撮影情報、日時、カメラ設定を保存します。色空間情報やプロファイルはICCやXMPとして埋め込めますが、必ずしも全てのアプリで正しく解釈されるわけではありません。

圧縮アルゴリズムの基本ステップ

JPEGの圧縮は複数の段階からなります。ここではBaseline JPEG(標準的な手法)を順に説明します。

  • 色空間変換(RGB → YCbCr): 人間の視覚は明るさ(輝度)に敏感で、色差(クロマ)には鈍感です。RGBを輝度成分Yと色差成分Cb、Crに変換することで、色差を低解像度にしてデータを減らせます。
  • クロマサブサンプリング: Cb/Crの解像度を下げる処理。一般的に4:2:0(水平・垂直とも半分)や4:2:2、4:4:4(非サンプリング)などが用いられます。
  • 分割(8x8ブロック): 画像は8x8ピクセルのブロックに区切られます。各ブロックごとに処理を行うため、ブロック境界にアーティファクトが現れる原因になります。
  • 離散コサイン変換(DCT): 8x8ピクセルの空間領域データを周波数領域の係数に変換します。DCTにより低周波(画像の大きな構造)と高周波(細かいディテール)に分離されます。
  • 量子化(Quantization): DCT係数を量子化テーブルで割って丸める処理。ここが主な損失源で、テーブルの値を大きくすると圧縮率は上がるが画質は低下します。多くの実装では「品質(quality)」パラメータを基に量子化テーブルをスケールします。
  • ジグザグ走査とランレングス符号化: 量子化後の係数をジグザグ順に並べて、連続するゼロを効率よく圧縮します。
  • エントロピー符号化(主にハフマン符号): 最終的にハフマン符号でエントロピー圧縮します。Baseline JPEGではハフマンが標準ですが、拡張仕様では算術符号も可能でした(特定実装で特許問題あり)。

バリエーション(プログレッシブ、ロスレスなど)

JPEGにはいくつかのモードがあります。代表的なのは「順次(sequential)」と「プログレッシブ(progressive)」です。順次は上記の単一スキャンでデータを格納する方式、プログレッシブは複数スキャンに分けて低解像度から徐々に詳細を復元する方式で、ウェブ上での見え方を良くするためによく使われます。

また、JPEGにはロスレスモードやロスレスに近い拡張も規定されていますが、一般的なカメラJPEGは損失圧縮のBaselineまたはProgressiveが主流です。JPEG2000は異なるウェーブレットベースのアルゴリズムを用いる別規格で、より高画質・高機能だが互換性は低いです。

画質と典型的なアーティファクト

量子化により発生する代表的なアーティファクトは次の通りです。

  • ブロッキングノイズ: 8x8ブロック境界に沿った階調の段差。高圧縮(低品質)で顕著になります。
  • リングイング(輪郭アーティファクト): 鮮鋭なエッジ周辺に現れる不自然な波状パターン。
  • クロマブリード: クロマサブサンプリングにより色のにじみが発生することがあります。特に高コントラストな縁で目立ちます。
  • バンディング: グラデーション領域で階調が段階状に見える現象。

画質評価はPSNR(ピーク信号対雑音比)やSSIM(構造類似度)などの指標で行います。PSNRはピクセル誤差を定量化しやすい一方、SSIMは人間の視覚に近い評価を与えることが多いです。ウェブや可視品質ではSSIMや主観評価が重視されます。

実務的な使い方とベストプラクティス

カメラやウェブでJPEGを扱う際の現実的なアドバイスをまとめます。

  • 撮影はRAWで行い、現像で最終的にJPEGを生成する: カメラ内JPEGは手軽だが柔軟性が低い。RAW現像なら露出やホワイトバランス、ノイズリダクションを後から最適化できます。
  • 繰り返しの再保存を避ける: JPEGは非可逆圧縮のため、同じ画像を何度も保存すると劣化が蓄積します。編集ワークフローでは可能な限り無圧縮またはロスレスフォーマットで作業し、最終出力でJPEG化するのが望ましいです。
  • 適切な品質設定を選ぶ: ウェブ用途では品質70〜85程度が画質とファイルサイズのバランスが良いことが多い。高品質(90以上)は大きなファイルを生むが目視上の改善は限定的な場合があります。
  • リサイズは圧縮前に行う: まず目的の表示サイズにリサイズしてからJPEG圧縮することで、不要な高周波成分が減り効率よく圧縮できます。
  • クロマサブサンプリングの選択: 高画質用途では4:4:4を、一般的な写真やウェブでは4:2:0で十分。テキストやシャープな線が多い画像はサブサンプリングで劣化しやすい。
  • プログレッシブJPEGの活用: ウェブではプログレッシブを使うと読み込み中でも低解像度で全体像が見えるため、ユーザー体験が向上することがあります。
  • カラープロファイルの埋め込み: sRGBで配信するならプロファイルを埋め込むことで色再現の問題を減らせます。プロファイルを埋め込まずに誤解釈されると色が変わることがあります。

実装とツール(ライブラリ/エンコーダ)

代表的なライブラリやエンコーダには次があります。

  • libjpeg / libjpeg-turbo: 伝統的で広く使われる実装。libjpeg-turboはSIMD最適化で高速。
  • mozjpeg: Mozillaが画像サイズ削減に注力して改良したエンコーダ(品質維持で更に小さいファイルを目指す)。
  • ImageMagick / GraphicsMagick: 画像処理のユーティリティでJPEGの変換や最適化に使われる。

互換性・ライセンス・特許について

JPEG(Baseline)の仕様自体は国際標準であり、フォーマットは広くオープンに利用されています。過去に関連する一部技術で特許問題がありましたが、今日のBaseline JPEGを使う上で実用的な障壁はほぼ解消されています(詳細は実装と地域による)。

代替フォーマットと今後の展望

JPEGの主な競合・後継フォーマットは次の通りです。

  • JPEG 2000: ウェーブレットを使い高品質・高機能を実現。ただし互換性と採用率で劣る。
  • WebP: Google開発。透過やアニメーションに対応し、同画質でJPEGより小さいことが多い。
  • AVIF: AV1ベースの画像フォーマットで高圧縮・高画質が期待される。ブラウザ対応が進んでいる。

ただし、互換性とエコシステムの成熟度でJPEGは依然重要です。多くの既存ツールやデバイスがJPEGを前提に動作しているため、当面はJPEGと新フォーマットの棲み分けが続くでしょう。

よくある誤解

いくつかの典型的な誤解を整理します。

  • 「品質パラメータが同じなら全て同じ画質になる」: エンコーダ実装によって品質パラメータの意味や扱いは異なるため、同じ数値でも結果は異なります。mozjpegやlibjpeg-turboで差が出ることがあります。
  • 「JPEGはすべて劣化する」: 圧縮率を非常に低く(高品質)設定すれば、視覚的に非可逆の劣化がほとんど現れない場合もありますがデータ的には不可逆です。

まとめ

JPEGは写真用圧縮フォーマットとして長年にわたり信頼されてきた標準です。DCTベースの損失圧縮により高い圧縮率を達成し、クロマサブサンプリングや量子化テーブルの調整で柔軟に画質とサイズを制御できます。現場ではRAWからの最終生成、リサイズ後の圧縮、適切な品質設定、メタデータ管理を行うことで効率的にJPEGを運用できます。一方でWebPやAVIFといった新世代フォーマットはさらなるサイズ削減や機能を提供するため、用途に応じて使い分けると良いでしょう。

参考文献