lain画集のBinHexエンコードされた画像を見る(8)
コメントセグメント
table: innocent.jpg_コメント
データ名 バイト数 実際のデータ(16進) 説明
マーカー 2 FF FE コメント
セグメント長 2 00 26 38
コメント 36 46 69 6C 65 ... 20 35 2E 32 "File written by Adobe Photoshop® 5.2 "
APP14セグメント (Adobeセグメント)
table: innocent.jpg_APP14セグメント
データ名 バイト数 実際のデータ(16進) 説明
マーカー 2 FF EE APP14
セグメント長 2 00 0E 14
ID 5 41 64 6F 62 65 "Adobe"
バージョン 2 00 64 100 (1.0?)
フラグ0 2 80 00 JPEG符号化時のモード?
フラグ1 2 00 00
トランスフォーム 1 01 1 (YCbCr)
量子化テーブル定義
table: innocent.jpg_量子化テーブル定義
データ名 バイト数 実際のデータ(16進) 説明
マーカー 2 FF DB 量子化テーブル定義
セグメント長 2 00 84 132
量子化テーブル精度+量子化テーブル番号 1 00 8bit、量子化テーブル0
量子化テーブル 64 10 0B 0B 0B ... 0C 0C 0C 0C Photoshop輝度 画質4 小
量子化テーブル精度+量子化テーブル番号 1 01 8bit、量子化テーブル1
量子化テーブル 64 11 0F 0F 11 ... 0C 0C 0C 0C Photoshop色差 画質4 小
JPEGでは画像は8x8ごとに処理するようである。もともとの画像の8x8に離散コサイン変換を行って周波数領域での8x8にしたうえで量子化テーブルの対応する値で割る、みたいな処理(と画像表示時に元に戻す際の処理)に使うのが量子化テーブルである。量子化テーブル0の値を並べてみると
table:innocent.jpg_量子化テーブル0?
10 0B 0B 0B 0C 0B 10 0C
0C 10 17 0F 0D 0F 17 1B
14 10 10 14 1B 1F 17 17
17 17 17 1F 11 0C 0C 0C
0C 0C 0C 11 0C 0C 0C 0C
0C 0C 0C 0C 0C 0C 0C 0C
0C 0C 0C 0C 0C 0C 0C 0C
0C 0C 0C 0C 0C 0C 0C 0C
となるがこれは誤り(は言い過ぎだがこれだけ見ても分からないの)で、ジグザグスキャンの順(参考サイトに図があるのでそちらを参照)に並べると
table:innocent.jpg_量子化テーブル0
10 0B 0B 10 17 1B 1F 11
0B 0C 0C 0F 14 17 0C 0C
0B 0C 0D 10 17 0C 0C 0C
10 0F 10 17 0C 0C 0C 0C
17 14 17 0C 0C 0C 0C 0C
1B 17 0C 0C 0C 0C 0C 0C
1F 0C 0C 0C 0C 0C 0C 0C
11 0C 0C 0C 0C 0C 0C 0C
となる。量子化テーブル1も同様に
table:innocent.jpg_量子化テーブル1
11 0F 11 15 14 14 11 11
0F 13 12 0E 0E 0C 0C 0C
11 12 0E 0E 0C 0C 0C 0C
15 0E 0E 0C 0C 0C 0C 0C
14 0E 0C 0C 0C 0C 0C 0C
14 0C 0C 0C 0C 0C 0C 0C
11 0C 0C 0C 0C 0C 0C 0C
11 0C 0C 0C 0C 0C 0C 0C
となり(左上から右下の対角線に対して)対称になった。(対象にならない量子化テーブルもあるようではある)
ちなみに対称になるはずということ、量子化テーブル1で3Bは明らかに周りの数から浮いているということにより、27行目の1かlかという部分は両方とも1に確定する。
JpegAnalyzer Plusでも既知の量子化テーブル(Photoshop輝度 画質4 小、Photoshop色差 画質4 小)になりAPP13セグメントの(JpegAnalyzer Plusでの)解析結果(画質4 標準圧縮)とも合致するので多分これでよいはず。
長くなってきたので次へ。