玄関コンピュータの部屋各種解説コーナーCGファイル概説

(6) スキャン開始セグメント(Start of scan segment、SOS)

オフセット内容(バイト数)
0マーカー識別子(1)
固定値FFH
1SOSマーカー(1)
固定値DAH
2フィールドの長さ(2)
バイト単位
4構成要素数(1)
整数
5構成要素識別子(1)
整数コード
6DC/AC構成要素のDHT識別子(1)
4ビット単位のコード
::
 スペクトル選択開始(1)
固定値00H
 スペクトル選択終了(1)
固定値3FH
 スペクトル選択の上位/下位ビット(1)
4ビット単位のコード(固定値00H)
 ハフマン符号化されたイメージデータ
::

ハフマンコード化されたイメージデータとそのヘッダで、ファイルの大半を占めるセグメントです。 JPEGではイメージデータをいくつかに分割して圧縮してもかまわないことになっていますので、ファイル中にSOSセグメントが複数存在することもあります。

1) マーカー識別子(M_ID)

このバイトと次のバイトがマーカーであることを識別するためのデータで、常に固定値FFHです。

2) SOSマーカー(M_SOS)

SOSセグメントであることを表すマーカーで、常に固定値DAHです。

3) ヘッダの長さ(Length)

マーカーに続くSOSヘッダのバイト数を表すデータで、このデータ自体も含めた値です。 SOSセグメントの終了は、別のセグメントのマーカー(FFH)の出現によって識別します。

4) 構成要素数(Ns)

セグメントに含まれているイメージデータの構成要素数を表す値で、SOF0セグメント中の構成要素数(Nf)と同じ値です。 したがって、通常は3(Y、Cb、Crの3種類)となります。 このデータに続く構成要素識別子(Cs)とDC/AC構成要素のDHT識別子(Td/Ta)のフィールドは、2つ1組で構成要素数だけ存在します。

5) 構成要素識別子(Cs)

構成要素の種類を表す整数コードで、SOF0セグメント中の構成要素識別子(Ci)と同じく、以下のような種類があります。

6) DC/AC構成要素のDHT識別子(Td/Ta)

構成要素が使用するDHTの識別子で、上位4ビットがDC(直流)構成要素のものを、下位4ビットがAC(交流)構成要素のものを表します。 DHTの識別子はDHTセグメント中のDHT識別子(Th)と同様で、通常、Yに関するテーブルはコード0、Cb・Crに関するテーブルはコード1です。 構成要素識別子(Cs)とDC/AC構成要素のDHT識別子(Td/Ta)の組は、SOF0セグメント中の構成要素識別子(Ci)、サンプル化要因(H/V)、量子化テーブルの番号(Tqi)の組と同じ順番で、同じ数だけ並んでいます。

7) スペクトル選択の開始と終了(Ss、Se)

スペクトル選択の開始と終了を表すJPEGの拡張機能用データで、通常は使用しませんから、開始コード0(00H)と終了コード63(3FH)しかありません。

8) スペクトル選択の上位/下位ビット(Ah/Al)

スペクトル選択におけるビット情報を表すJPEGの拡張機能用データで、通常は使用しませんから、上位4ビットも下位4ビットも0(全体として固定値00H)です。

9) ハフマン符号化されたイメージデータ

ハフマン符号化されたイメージデータで、イメージデータの構成要素は、構成要素識別子(Cs)とDC/AC構成要素のDHT識別子(Td/Ta)の組と同じ順番、つまりSOF0セグメント中で定義された構成要素順に並んでいます。 イメージデータの場合、データ中にマーカー識別子FFHと同じデータが出てくる可能性があります。 そのような場合は、FFHの後にマーカーには存在しない00Hというデータを続けて、マーカーと混同するのを避けます。

(7) イメージ終了セグメント(End of image segment、EOI)

オフセット内容(バイト数)
0マーカー識別子(1)
固定値FFH
1EOIマーカー(1)
固定値D9H

JFIFファイルの終了を表すセグメントで、JFIFファイルの末尾に1つだけ存在します。

1) マーカー識別子(M_ID)

このバイトと次のバイトがマーカーであることを識別するためのデータで、常に固定値FFHです。

2) EOIマーカー(M_EOI)

EOIセグメントであることを表すマーカーで、常に固定値D9Hです。

(8) 拡張情報セグメント

名前解説
M_SOF0C0Hハフマン式コードのベースラインDCTフレーム
M_SOF1C1Hハフマン式コードの拡張シーケンシャルDCTフレーム
M_SOF2C2Hハフマン式コードのプログレッシブDCTフレーム
M_SOF3C3Hハフマン式コードの可逆(Spatial DPCM)フレーム
M_DHTC4Hハフマン式テーブルを定義する
M_SOF5C5Hハフマン式コードの差分拡張シーケンシャルフレーム
M_SOF6C6Hハフマン式コードの差分プログレッシブフレーム
M_SOF7C7Hハフマン式コードの差分可逆(Spatial DPCM)フレーム
M_JPGC8H拡張のための予備
M_SOF9C9H算術式コードの拡張シーケンシャルDCTフレーム
M_SOF10CAH算術式コードのプログレッシブDCTフレーム
M_SOF11CBH算術式コードの可逆(Spatial DPCM)フレーム
M_DACCCH算術式圧縮テーブルを定義する
M_SOF13CDH算術式コードの差分拡張シーケンシャルDCTフレーム
M_SOF14CEH算術式コードの差分プログレッシブDCTフレーム
M_SOF15CFH算術式コードの差分の可逆(Spatial DPCM)フレーム
M_RST0D0H0でリスタートする
M_RST1D1H1でリスタートする
M_RST2D2H2でリスタートする
M_RST3D3H3でリスタートする
M_RST4D4H4でリスタートする
M_RST5D5H5でリスタートする
M_RST6D6H6でリスタートする
M_RST7D7H7でリスタートする
M_SOID8Hイメージの開始
M_EOID9Hイメージの終了
M_SOSDAHスキャンの開始
M_DQTDBH量子化テーブルを定義する
M_DNLDCH行数を定義する
M_DRIDDHリスタートの間隔を定義する
M_DHPDEH階層行数を定義する(ハイアラーキカル方式)
M_EXPDFH標準イメージの拡張参照
M_APP0E0H特定のタイプ0のアプリケーション
M_APP1E1H特定のタイプ1のアプリケーション
M_APP2E2H特定のタイプ2のアプリケーション
M_APP3E3H特定のタイプ3のアプリケーション
M_APP4E4H特定のタイプ4のアプリケーション
M_APP5E5H特定のタイプ5のアプリケーション
M_APP6E6H特定のタイプ6のアプリケーション
M_APP7E7H特定のタイプ7のアプリケーション
M_APP8E8H特定のタイプ8のアプリケーション
M_APP9E9H特定のタイプ9のアプリケーション
M_APP10EAH特定のタイプ10のアプリケーション
M_APP11EBH特定のタイプ11のアプリケーション
M_APP12ECH特定のタイプ12のアプリケーション
M_APP13EDH特定のタイプ13のアプリケーション
M_APP14EEH特定のタイプ14のアプリケーション
M_APP15EFH特定のタイプ15のアプリケーション
M_JPG0F0HJPEGの拡張のための予備
M_JPG1F1HJPEGの拡張のための予備
M_JPG2F2HJPEGの拡張のための予備
M_JPG3F3HJPEGの拡張のための予備
M_JPG4F4HJPEGの拡張のための予備
M_JPG5F5HJPEGの拡張のための予備
M_JPG6F6HJPEGの拡張のための予備
M_JPG7F7HJPEGの拡張のための予備
M_JPG8F8HJPEGの拡張のための予備
M_JPG9F9HJPEGの拡張のための予備
M_JPG10FAHJPEGの拡張のための予備
M_JPG11FBHJPEGの拡張のための予備
M_JPG12FCHJPEGの拡張のための予備
M_JPG13FDHJPEGの拡張のための予備
M_COMFEHコメント

オプションの拡張情報セグメントには多種多様なものがあり、いちいち解説していますとキリがありませんので、これまでに出てきたものも含めて、マーカーの種類と簡単な解説を一覧表にしておきます。