偶然見つけた特殊なJPEGファイルですが、いい事例だと思いますので載せました。
00000000 ****** SOI :Start Of Image ******
00000002 [0010] APP0 :JPEG File Interchange Format Ver 1.1 (JFIF)
density 1:1 no unit
00000014 [0084] DQT :Define Quantization Table
00000018 QT0-8bit 汎用輝度(IJG50,LEAD050,ACD20-22)
00000059 QT1-8bit 汎用色差(IJG50,LEAD050,ACD47-48)
0000009A [0011] SOF0 :Start Of Frame 0 - Baseline DCT
217[7] x 318[2] pixel - 24bit color (YCbCr 4:2:0)
ComponentID-01 Y 2x2 QT0
ComponentID-02 Cb 1x1 QT1
ComponentID-03 Cr 1x1 QT1
000000AD [00D2] DHT :Define Huffman Table
000000B1 HT0-DC 汎用輝度HT-DC
000000CE HT0-AC 汎用輝度HT-AC
00000181 [0008] SOS :Start Of Scan 0-63[00]
HT Selector[DC/AC] Y[0/0]
0000018B ****** Image Data ******
Data Size 7,762 bytes
00001FDD [00D2] DHT :Define Huffman Table
00001FE1 HT1-DC 汎用色差HT-DC
00001FFE HT1-AC 汎用色差HT-AC
000020B1 [0008] SOS :Start Of Scan 0-63[00]
HT Selector[DC/AC] Cb[1/1]
000020BB ****** Image Data ******
Data Size 747 bytes
000023A6 [00D2] DHT :Define Huffman Table
000023AA HT1-DC 汎用色差HT-DC
000023C7 HT1-AC 汎用色差HT-AC
0000247A [0008] SOS :Start Of Scan 0-63[00]
HT Selector[DC/AC] Cr[1/1]
00002484 ****** Image Data ******
Data Size 425 bytes
0000262D ****** EOI :End Of Image ******
まずは、このファイルの構造を良く見て下さい。
ベースライン形式でありながらDHTとSOS、イメージデータがそれぞれ3つ有りますよね。
SOSのHT Selectorを見て下さい。
YとCb、Crが別々に保存されている事が判ります。
このように成分毎に分ける方法をノンインターリブといいます。
一般的には、このノンインターリブ方式はY成分だけのグレースケール(白黒)画像しかありません。
ノンインターリブと反対にY、Cb、Cr各成分を混ぜる方法をインターリブといいます。
インターリブ方式は、WEBブラウザのように逐次複号をおこない画像を表示するようなソフトでは、先頭からカラーで表示出来ます。
カラーのJPEGファイルはほとんどインターリブ方式です。
関連ページ:表示色成分について
以下にいろいろなパターンの解析リスト(SOFからスキャンデータまで)を用意しました。
構造を見比べて下さい。
以下のどの構造もJPEG規格に適合していますので画像ビュアで表示出来ています。
一般のベースライン(インターリブ)
0000009A [0011] SOF0 :Start Of Frame 0 - Baseline DCT
768[0] x 560[0] pixel - 24bit color (YCbCr 4:2:2)
ComponentID-01 Y 2x1 QT0
ComponentID-02 Cb 1x1 QT1
ComponentID-03 Cr 1x1 QT1
000000AD [01A2] DHT :Define Huffman Table
000000B1 HT0-DC 汎用輝度HT-DC
000000CE HT0-AC 汎用輝度HT-AC
00000181 HT1-DC 汎用色差HT-DC
0000019E HT1-AC 汎用色差HT-AC
00000251 [000C] SOS :Start Of Scan 0-63[00]
HT Selector[DC/AC] Y[0/0] Cb[1/1] Cr[1/1]
0000025F ****** Image Data ******
Data Size 60,106 bytes
←3つの成分を指定
←3つの成分がまとめて保存されている
グレースケール(ノンインターリブ)
00000059 [000B] SOF0 :Start Of Frame 0 - Baseline DCT
747[5] x 767[1] pixel - 8bit grey scaled (Mono)
ComponentID-01 Y 1x1 QT0
00000066 [001B] DHT :Define Huffman Table
0000006A HT0-DC CRC-EF9FF62A
00000083 [003C] DHT :Define Huffman Table
00000087 HT0-AC CRC-83D74A7E
000000C1 [0008] SOS :Start Of Scan 0-63[00]
HT Selector[DC/AC] Y[0/0]
000000CB ****** Image Data ******
Data Size 23,386 bytes
←ひとつの成分を指定
←ひとつの成分を保存
グレースケールのプログレッシブ(ノンインターリブ)
00000081 [000B] SOF2 :Start Of Frame 2 - Progressive DCT
Image size 623 x 768 pixel - grey scaled
Component-Y 1x1 QT0
0000008E [001B] DHT :Define Huffman Table HT0-DC
000000AB [0008] SOS :Start Of Scan 0-0[01]
HT Selector[DC/AC] Y[0/0]
Image Size 4,640 bytes Address (000000B5-000012D5)
000012D6 [002F] DHT :Define Huffman Table HT0-AC
00001307 [0008] SOS :Start Of Scan 1-5[02]
HT Selector[DC/AC] Y[0/0]
Image Size 7,110 bytes Address (00001311-00002ED7)
00002ED8 [0038] DHT :Define Huffman Table HT0-AC
00002F12 [0008] SOS :Start Of Scan 6-63[02]
HT Selector[DC/AC] Y[0/0]
Image Size 3,543 bytes Address (00002F1C-00003CF3)
00003CF4 [002B] DHT :Define Huffman Table HT0-AC
00003D21 [0008] SOS :Start Of Scan 1-63[21]
HT Selector[DC/AC] Y[0/0]
Image Size 10,538 bytes Address (00003D2B-00006655)
00006656 [0008] SOS :Start Of Scan 0-0[10]
HT Selector[DC/AC] Y[0/0]
Image Size 937 bytes Address (00006660-00006A09)
00006A0A [0029] DHT :Define Huffman Table HT0-AC
00006A35 [0008] SOS :Start Of Scan 1-63[10]
HT Selector[DC/AC] Y[0/0]
Image Size 23,919 bytes Address (00006A3F-0000C7AE)
←ひとつの成分を指定
←ひとつの成分をビット・係数分割で保存
係数0(DC成分)を1bit
係数1〜5(AC成分)を2bit
係数6以降(AC成分)を2bit
係数1以降(AC成分)を1bit
係数0(DC成分)の残りのbit
係数1以降(AC成分)の残りのbit
(サンプルをなくしたので解析リストはちょっと古いです)
特殊なパターンのベースライン(複合パターン)
0000012E [0011] SOF0 :Start Of Frame 0 - Baseline DCT
160[0] x 120[0] pixel - 24bit color (YCbCr 4:2:2)
ComponentID-01 Y 2x1 QT0
ComponentID-02 Cb 1x1 QT1
ComponentID-03 Cr 1x1 QT1
00000141 [0008] SOS :Start Of Scan 0-63[00]
HT Selector[DC/AC] Y[0/0]
0000014B ****** Image Data ******
Data Size 6,832 bytes
00001BFB [0051] DHT :Define Huffman Table
00001BFF HT0-DC CRC-BD0F99F2
00001C18 HT0-AC CRC-5DCBB91E
00001C4E [000A] SOS :Start Of Scan 0-63[00]
HT Selector[DC/AC] Cb[0/0] Cr[0/0]
00001C5A ****** Image Data ******
Data Size 1,582 bytes
←3つの成分を指定
←輝度成分だけ保存、ここはノンインターリブ
←色差成分Cb、Crがまとめて保存、ここはインターリブ