オフセット | 内容(バイト数) |
---|---|
0 | マーカー識別子(1) 固定値FFH |
1 | SOSマーカー(1) 固定値DAH |
2 | フィールドの長さ(2) バイト単位 |
4 | 構成要素数(1) 整数 |
5 | 構成要素識別子(1) 整数コード |
6 | DC/AC構成要素のDHT識別子(1) 4ビット単位のコード |
: | : |
スペクトル選択開始(1) 固定値00H | |
スペクトル選択終了(1) 固定値3FH | |
スペクトル選択の上位/下位ビット(1) 4ビット単位のコード(固定値00H) | |
ハフマン符号化されたイメージデータ | |
: | : |
ハフマンコード化されたイメージデータとそのヘッダで、ファイルの大半を占めるセグメントです。 JPEGではイメージデータをいくつかに分割して圧縮してもかまわないことになっていますので、ファイル中にSOSセグメントが複数存在することもあります。
このバイトと次のバイトがマーカーであることを識別するためのデータで、常に固定値FFHです。
SOSセグメントであることを表すマーカーで、常に固定値DAHです。
マーカーに続くSOSヘッダのバイト数を表すデータで、このデータ自体も含めた値です。 SOSセグメントの終了は、別のセグメントのマーカー(FFH)の出現によって識別します。
セグメントに含まれているイメージデータの構成要素数を表す値で、SOF0セグメント中の構成要素数(Nf)と同じ値です。 したがって、通常は3(Y、Cb、Crの3種類)となります。 このデータに続く構成要素識別子(Cs)とDC/AC構成要素のDHT識別子(Td/Ta)のフィールドは、2つ1組で構成要素数だけ存在します。
構成要素の種類を表す整数コードで、SOF0セグメント中の構成要素識別子(Ci)と同じく、以下のような種類があります。
構成要素が使用する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)の組と同じ順番で、同じ数だけ並んでいます。
スペクトル選択の開始と終了を表すJPEGの拡張機能用データで、通常は使用しませんから、開始コード0(00H)と終了コード63(3FH)しかありません。
スペクトル選択におけるビット情報を表すJPEGの拡張機能用データで、通常は使用しませんから、上位4ビットも下位4ビットも0(全体として固定値00H)です。
ハフマン符号化されたイメージデータで、イメージデータの構成要素は、構成要素識別子(Cs)とDC/AC構成要素のDHT識別子(Td/Ta)の組と同じ順番、つまりSOF0セグメント中で定義された構成要素順に並んでいます。
イメージデータの場合、データ中にマーカー識別子FFHと同じデータが出てくる可能性があります。
そのような場合は、FFHの後にマーカーには存在しない00Hというデータを続けて、マーカーと混同するのを避けます。
オフセット | 内容(バイト数) |
---|---|
0 | マーカー識別子(1) 固定値FFH |
1 | EOIマーカー(1) 固定値D9H |
JFIFファイルの終了を表すセグメントで、JFIFファイルの末尾に1つだけ存在します。
このバイトと次のバイトがマーカーであることを識別するためのデータで、常に固定値FFHです。
EOIセグメントであることを表すマーカーで、常に固定値D9Hです。
名前 | 値 | 解説 |
---|---|---|
M_SOF0 | C0H | ハフマン式コードのベースラインDCTフレーム |
M_SOF1 | C1H | ハフマン式コードの拡張シーケンシャルDCTフレーム |
M_SOF2 | C2H | ハフマン式コードのプログレッシブDCTフレーム |
M_SOF3 | C3H | ハフマン式コードの可逆(Spatial DPCM)フレーム |
M_DHT | C4H | ハフマン式テーブルを定義する |
M_SOF5 | C5H | ハフマン式コードの差分拡張シーケンシャルフレーム |
M_SOF6 | C6H | ハフマン式コードの差分プログレッシブフレーム |
M_SOF7 | C7H | ハフマン式コードの差分可逆(Spatial DPCM)フレーム |
M_JPG | C8H | 拡張のための予備 |
M_SOF9 | C9H | 算術式コードの拡張シーケンシャルDCTフレーム |
M_SOF10 | CAH | 算術式コードのプログレッシブDCTフレーム |
M_SOF11 | CBH | 算術式コードの可逆(Spatial DPCM)フレーム |
M_DAC | CCH | 算術式圧縮テーブルを定義する |
M_SOF13 | CDH | 算術式コードの差分拡張シーケンシャルDCTフレーム |
M_SOF14 | CEH | 算術式コードの差分プログレッシブDCTフレーム |
M_SOF15 | CFH | 算術式コードの差分の可逆(Spatial DPCM)フレーム |
M_RST0 | D0H | 0でリスタートする |
M_RST1 | D1H | 1でリスタートする |
M_RST2 | D2H | 2でリスタートする |
M_RST3 | D3H | 3でリスタートする |
M_RST4 | D4H | 4でリスタートする |
M_RST5 | D5H | 5でリスタートする |
M_RST6 | D6H | 6でリスタートする |
M_RST7 | D7H | 7でリスタートする |
M_SOI | D8H | イメージの開始 |
M_EOI | D9H | イメージの終了 |
M_SOS | DAH | スキャンの開始 |
M_DQT | DBH | 量子化テーブルを定義する |
M_DNL | DCH | 行数を定義する |
M_DRI | DDH | リスタートの間隔を定義する |
M_DHP | DEH | 階層行数を定義する(ハイアラーキカル方式) |
M_EXP | DFH | 標準イメージの拡張参照 |
M_APP0 | E0H | 特定のタイプ0のアプリケーション |
M_APP1 | E1H | 特定のタイプ1のアプリケーション |
M_APP2 | E2H | 特定のタイプ2のアプリケーション |
M_APP3 | E3H | 特定のタイプ3のアプリケーション |
M_APP4 | E4H | 特定のタイプ4のアプリケーション |
M_APP5 | E5H | 特定のタイプ5のアプリケーション |
M_APP6 | E6H | 特定のタイプ6のアプリケーション |
M_APP7 | E7H | 特定のタイプ7のアプリケーション |
M_APP8 | E8H | 特定のタイプ8のアプリケーション |
M_APP9 | E9H | 特定のタイプ9のアプリケーション |
M_APP10 | EAH | 特定のタイプ10のアプリケーション |
M_APP11 | EBH | 特定のタイプ11のアプリケーション |
M_APP12 | ECH | 特定のタイプ12のアプリケーション |
M_APP13 | EDH | 特定のタイプ13のアプリケーション |
M_APP14 | EEH | 特定のタイプ14のアプリケーション |
M_APP15 | EFH | 特定のタイプ15のアプリケーション |
M_JPG0 | F0H | JPEGの拡張のための予備 |
M_JPG1 | F1H | JPEGの拡張のための予備 |
M_JPG2 | F2H | JPEGの拡張のための予備 |
M_JPG3 | F3H | JPEGの拡張のための予備 |
M_JPG4 | F4H | JPEGの拡張のための予備 |
M_JPG5 | F5H | JPEGの拡張のための予備 |
M_JPG6 | F6H | JPEGの拡張のための予備 |
M_JPG7 | F7H | JPEGの拡張のための予備 |
M_JPG8 | F8H | JPEGの拡張のための予備 |
M_JPG9 | F9H | JPEGの拡張のための予備 |
M_JPG10 | FAH | JPEGの拡張のための予備 |
M_JPG11 | FBH | JPEGの拡張のための予備 |
M_JPG12 | FCH | JPEGの拡張のための予備 |
M_JPG13 | FDH | JPEGの拡張のための予備 |
M_COM | FEH | コメント |
オプションの拡張情報セグメントには多種多様なものがあり、いちいち解説していますとキリがありませんので、これまでに出てきたものも含めて、マーカーの種類と簡単な解説を一覧表にしておきます。