事例集 マーカ破損ファイルの修復例 Back

修復例1

このファイルはエラーメッセージの通り量子化テーブル(QT0)が無いので、表示出来ません。
Address Length Message
00000000 ****** SOI :Start Of Image ******
00000002 [0010] APP0 :JPEG File Interchange Format Ver 1.1 (JFIF)
         density 72:72 dots/inch
00000014 [0043] EXP :Expand Reference Components
00000059 [0043] DQT :Define Quantization Table
         0000005D QT1-8bit CRC-386EC293
0000009E [0011] SOF0 :Start Of Frame 0 - Baseline DCT
         600[0] x 800[0] pixel - 24bit color (YCbCr 4:4:4)
         ComponentID-01 Y 1x1 QT0
         ComponentID-02 Cb 1x1 QT1
         ComponentID-03 Cr 1x1 QT1
000000B1 [001D] DHT :Define Huffman Table
         000000B5 HT0-DC CRC-CAFD23C5
000000D0 [0055] DHT :Define Huffman Table
         000000D4 HT0-AC CRC-F0F86D17
00000127 [001B] DHT :Define Huffman Table
         0000012B HT1-DC CRC-ED89AE4A
00000144 [003A] DHT :Define Huffman Table
         00000148 HT1-AC CRC-D0B3469A
00000180 [000C] SOS :Start Of Scan 0-63[00]
         HT Selector[DC/AC] Y[0/0] Cb[1/1] Cr[1/1]
0000018E ****** Image Data ******
         Data Size 72,753 bytes
00011DBF ****** EOI :End Of Image ******

          ◆ テーブル ( QT0 ) が有りません ◆

     Analyze End.




←余り見かけないセグメントが有る




←QT0が指定されているがQT0の入ったDQTが無い

でも良く見ると、0x00000014番地にEXPと言う見たこと無いセグメントがあります。
レングス長も下にある
DQTと同じ0x0043だし…

勘の鋭い人はお気づきでしょう。
これは
DQTマーカが化けた、または偽装されたファイルです。

DQTのマーカ部は0xFFDBです。このEXPは0xFFDFです。 (参照:マーカ一覧DQT)
アドレスはFFの次のバイトなので0x00000015。
ここを0xDFから0xDBに変更すればなおせそうです。

この場合、JpegAnalyzer のパッチ機能で修復出来ます。
0x00000014番地のEXPの場所でマウスを右クリックします。
出て来たポップアップメニューから、まずはダンプを選びます。

Addr  + 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F Ascii Char
00000000
FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 48 .リ....JFIF.....H
00000010 00 48 00 00
FF DF 00 43 00 06 04 04 04 05 04 06 .H...゚.C........
            
↑ここをDFからDBへ変更する
00000020 05 05 06 09 06 05 06 09 0B 08 06 06 08 0B 0C 0A ................
00000030 0A 0B 0A 0A 0C 10 0C 0C 0C 0C 0C 0C 10 0C 0E 0F ................
00000040 10 0F 0E 0C 13 13 14 14 13 13 1C 1B 1B 1B 1C 20 ...............
00000050 20 20 20 20 20 20 20 20 20
FF DB 00 43 01 07 07     .ロ.C...
00000060 07 0D 0C 0D 18 10 10 18 1A 15 11 15 1A 20 20 20 .............
00000070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
00000080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
00000090 20 20 20 20 20 20 20 20 20 20 20 20 20 20
FF C0        .タ

ダンプ画面が解析画面の右側に現れます。
次に目的の0x00000015の場所でマウスを右クリックします。
出て来たポップアップメニューから、パッチを選びます。

入力ボックスが現れます。中に00000015-DFと表示されています。
アドレスは省略出来るので変更したい値をハイフンに続けて”-db”と入力してやります。




あとは解析ボタンを押して結果を確認します。
設定でパッチ処理後、再解析するにチェックが入っている場合はもう結果が表示されています。
プレビュー画面が表示中なら、この時点で画像が表示されます。


Address Length Message
00000000 ****** SOI :Start Of Image ******
00000002 [0010] APP0 :JPEG File Interchange Format Ver 1.1 (JFIF)
         density 72:72 dots/inch
00000014 [0043] DQT :Define Quantization Table
         00000018 QT0-8bit CRC-4DA5F89A

00000059 [0043] DQT :Define Quantization Table
         0000005D QT1-8bit CRC-386EC293
0000009E [0011] SOF0 :Start Of Frame 0 - Baseline DCT
         600[0] x 800[0] pixel - 24bit color (YCbCr 4:4:4)
         ComponentID-01 Y 1x1 QT0
         ComponentID-02 Cb 1x1 QT1
         ComponentID-03 Cr 1x1 QT1
000000B1 [001D] DHT :Define Huffman Table
         000000B5 HT0-DC CRC-CAFD23C5
000000D0 [0055] DHT :Define Huffman Table
         000000D4 HT0-AC CRC-F0F86D17
00000127 [001B] DHT :Define Huffman Table
         0000012B HT1-DC CRC-ED89AE4A
00000144 [003A] DHT :Define Huffman Table
         00000148 HT1-AC CRC-D0B3469A
00000180 [000C] SOS :Start Of Scan 0-63[00]
         HT Selector[DC/AC] Y[0/0] Cb[1/1] Cr[1/1]
0000018E ****** Image Data ******
         Data Size 72,753 bytes
00011DBF ****** EOI :End Of Image ******

     Analyze End.




←DQTとして認識されている





















←エラーが出なくなった


修復例2

次は、マーカ偽装ファイルの修復例1と同じ偽装で、ちょっと判りづらいものを見てみます。
Address Length Message
00000000 ****** SOI :Start Of Image ******
00000002 [0010] APP0 :JPEG File Interchange Format Ver 1.1 (JFIF)
         密度 150:150 dots/inch
00000014     <=== 不明な領域 69 bytes
00000059 [0043] DQT :Define Quantization Table
         0000005D QT1-8bit IJG色差 画質80
0000009E [0011] SOF0 :Start Of Frame 0 - Baseline DCT
         874[6] x 1240[8] pixel - 24bit color (YCbCr 4:2:0)
         ComponentID-01 Y 2x2 QT0
         ComponentID-02 Cb 1x1 QT1
         ComponentID-03 Cr 1x1 QT1
000000B1 [001F] DHT :Define Huffman Table
         000000B5 HT0-DC  汎用輝度HT-DC
000000D2 [00B5] DHT :Define Huffman Table
         000000D6 HT0-AC  汎用輝度HT-AC
00000189 [001F] DHT :Define Huffman Table
         0000018D HT1-DC  汎用色差HT-DC
000001AA [00B5] DHT :Define Huffman Table
         000001AE HT1-AC  汎用色差HT-AC
00000261 [000C] SOS :Start Of Scan 0-63[00]
         HT Selector[DC/AC] Y[0/0] Cb[1/1] Cr[1/1]
0000026F ****** Image Data ******
         Data Size 74,580 bytes
000125C3 ****** EOI :End Of Image ******

        ◆ テーブル ( QT0 ) が有りません ◆
        ◆ 異常な領域・セグメントがあります ◆


     Analyze End.





←不明な領域がある




←QT0が指定されているがQT0の入ったDQTが無い

上の例では、前回と同様に量子化テーブル(QT0)が足りません。
アドレス0x00000014番地に不明なデータが69バイト有ります。
69バイトは10進なので、16進に直すと0x45、マーカの2バイト分を引くと0x43になります。
やはり、下の
DQTと同じレングス長です。 マーカ部をダンプして確認、修正してやります。

ちなみに、
DQTというセグメントは、テーブルの数によりレングス長はほぼ決まります。
よって、以下のレングス長が一般的です。
テーブル1個=0x0043、テーブル2個=0x0084、テーブル3個=0x00C5、テーブル4個=0x0106

※8ビットテーブルと16ビットテーブルがあり、上記テーブルサイズは8ビットテーブルの場合です。
※16ビットテーブルはベースラインは使用不可、それ以外でもほとんど使われません。


Addr  + 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F Ascii Char
00000000
FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 96 .リ....JFIF......
00000010 00 96 00 00 FF FF 00 43 00 06 04 05 06 05 04 06 .......C........
           ↑ここをFFからDBへ変更する
00000020 06 05 06 07 07 06 08 0A 10 0A 0A 09 09 0A 14 0E ................
00000030 0F 0C 10 17 14 18 18 17 14 16 16 1A 1D 25 1F 1A .............%..
00000040 1B 23 1C 16 16 20 2C 20 23 26 27 29 2A 29 19 1F .#... , #&')*)..
00000050 2D 30 2D 28 30 25 28 29 28
FF DB 00 43 01 07 07 -0-(0%()(.ロ.C...
00000060 07 0A 08 0A 13 0A 0A 13 28 1A 16 1A 28 28 28 28 ........(...((((
00000070 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 ((((((((((((((((
00000080 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 ((((((((((((((((
00000090 28 28 28 28 28 28 28 28 28 28 28 28 28 28
FF C0 ((((((((((((((.タ

アドレス0x00000014番地は0xFF、0x00000015番地は0xFFです。
0x00000015番地を前回と同様に0xDBに書き換えてやります。


Address Length Message
00000000 ****** SOI :Start Of Image ******
00000002 [0010] APP0 :JPEG File Interchange Format Ver 1.1 (JFIF)
         密度 150:150 dots/inch
00000014 [0043] DQT :Define Quantization Table
         00000018 QT0-8bit IJG輝度 画質80

00000059 [0043] DQT :Define Quantization Table
         0000005D QT1-8bit IJG色差 画質80
0000009E [0011] SOF0 :Start Of Frame 0 - Baseline DCT
         874[6] x 1240[8] pixel - 24bit color (YCbCr 4:2:0)
         ComponentID-01 Y 2x2 QT0
         ComponentID-02 Cb 1x1 QT1
         ComponentID-03 Cr 1x1 QT1
000000B1 [001F] DHT :Define Huffman Table
         000000B5 HT0-DC  汎用輝度HT-DC
000000D2 [00B5] DHT :Define Huffman Table
         000000D6 HT0-AC  汎用輝度HT-AC
00000189 [001F] DHT :Define Huffman Table
         0000018D HT1-DC  汎用色差HT-DC
000001AA [00B5] DHT :Define Huffman Table
         000001AE HT1-AC  汎用色差HT-AC
00000261 [000C] SOS :Start Of Scan 0-63[00]
         HT Selector[DC/AC] Y[0/0] Cb[1/1] Cr[1/1]
0000026F ****** Image Data ******
         Data Size 74,580 bytes
000125C3 ****** EOI :End Of Image ******

     Analyze End.





←DQTとして認識されている





















←エラーが出なくなった

この例の場合、QT1はIJG色差 画質80と判っています。

量子化テーブルは同じ画質では、輝度と色差でペアーになっています。
SOFのサンプリング比を見て回転したもので無ければ、QT0はIJG輝度 画質80を使用している可能性が高いのです。

よって、破損している領域を消して、QT0 IJG輝度 画質80のテーブルを他の画像からコピーすることで、当てずっぽうですが修復出来ます。

Top