事例集 以前表示出来たファイルが見れなくなった場合

Back

たまに、「ディスクに保存していたJPEGファイルが開けなくなりました」と言う問い合わせが来る事があります。

壊れたファイルは以下のような表示になっています。
Address Length Message
00000000     <=== 不明な領域 39,396 bytes

        ◆ JPEGファイルでは無さそうです ◆

     Analyze End.

以前は表示出来ていた場合、本当に壊れてしまっている可能性大です。

何かのソフトの不具合、ウイルスの影響、操作ミスなど色々考えられる要因は有りますが、一番に可能性が高いのは、異常停止によるファイル破壊ではないでしょうか?

Windows動作中にコンピュータの電源を切ってしまった

システムがハング(フリーズ)したので、リセットボタンを押した

こういった事は、初心者、ベテラン関係なく、コンピューターに接していればたまに経験するものです。
再起動でスキャンディスクが走り、普通は問題なく使えるようになりますが、タイミングが悪いとファイルやOS自体も壊れる危険性があります。

ディスクの中にはディレクトリーという、ファイルが何処に記録されれいるかが書かれた本の目次に相当する部分がありますが、Windows動作中はその部分が頻繁に更新されます。

ディレクトリーの更新途中で電源が切れたり、リセットするとファイルが何処に書かれているか判らなくなり、再起動で動作するスキャンディスクでそういったファイルは捨てられたり別の一時ファイルに置き換えられたりします。
※一時ファイルを作るか開放するかはスキャンディスクの詳細設定で指定されています。 

場合によっては、不整合ながら今までずっと見えていたファイルでも、OSアップグレード等のインストール時に走るスキャンディスクがきっかけとなり、読めなくなってしまうって事もあります。

スキャンディスクが作る一時ファイル
File????.chkはドライブルート(ドライブアイコンを開けた場所)に出来ます。
ファイルになっていればJpegAnalyzerでJPEG構造の部分だけ取り出して修復する事も出来ますが、空き領域に還元された場合、Windowsが動作することにより上書きされて無くなってしまいます。

問い合わせ頂いた方のファイルを見てみますと、ファイルサイズは大体合っているものの、中身が別のファイルに置き換わっているものが大半でした。

では、実際の画像データはどこへ行ってしまったんでしょうか?

中身が別ファイルに置き換わっている場合、元の画像データは空き領域になっている可能性が高いです。

発見が早ければ
復元(株式会社ハイセライト)DataRecovery(フリーソフト:トキワ個別教育研究所)などのソフトで探し出す手はありますが、通常は手遅れになることが多いです。

おきまりですが、大切な写真ファイルはバックアップしておきましょう。


JPEGデータかどうかの判断

以前見れていたファイルが見れなくなって、ファイルとしては元有った場所に存在する場合、修復するにはそのファイルがどうなっているか調べる事から始まります。

そこで、JpegAnalyzerの出番となる訳ですが、いきなりファイルを読ませて、それなりのエラーが出ても、半信半疑だと思いますので、そのファイルがJPEGとして読み取れるかの判断ポイントをいくつか挙げておきます。


JPEGファイルでは無さそうですと表示するには根拠があります
何のセグメントも表示されずにこのメッセージが表示される場合、JPEG構造の部分がファイル中に何処にも無いことを示しています。
他にも色々なメッセージが出ますから、個々の意味を以下のエラーリストを見て確認して下さい。

JPEGフォーマットエラーリスト
解析リストの最終に表示されるファイル構造に問題のある場合のエラーです。
赤色で表示されるエラーは表示に影響し、オレンジのエラーは表示に影響しません。

JPEGセグメントエラーリスト
解析リストの途中で表示されるセグメント情報に問題のある場合のエラーです。
赤色で表示されるエラーは表示に影響し、ピンクのエラーは表示に影響しません。


通常フォーマットエラーとセグメントエラーは同時に出て、原因も同じものを指摘します。
正常なリスト出力例と見比べて下さい
ベースラインとプログレッシブのページに記載されているリストが標準的なJPEG画像の解析例です。
デジタルカメラ等の機器から出力した画像でしたら、その機器で出力したものは同じ構造になります。
ソフトが出力した画像でも、出力パラメータを変えていなければ同じ構造になります。
同じ出力元の正常に表示するファイルを解析して見比べれば、JPEGの知識が無くても何が違っているかは判るはずです。
どの部分が残っていて、どの部分が無いのか判れば修復作業の第一歩です。

ダンプ画面も役に立ちます
ダンプ画面、特にASCIIテキスト部分を見て下さい。
テキストとして判読出来る部分はJPEGにはCOM、APPセグメント内にしかありません。
COM、APPセグメント内にあるテキストはソフト名であったり、カメラの型名であったり、モードであったりと、意味が通じるものがほとんどです。
数字の羅列が延々と続いたり、ファイルのパス名やURLが続いたりしません。


以下の文字列、またはその一部がASCIIダンプで確認出来る場合、それらのファイルの断片の可能性が高いです。

実行形式ファイル
 
This program requires Microsoft Windows
 This program cannot be run in DOS mode
 This program must be run under Win3
2

HTMLファイル
 
<html><head><style> …のように括弧で囲まれたテキスト

また、JPEGファイルは主に2つの領域に区分出来、見分けるための特徴を挙げます。

JPEGヘッダー(マーカ・セグメント)領域
JPEGのセグメント長は65536バイト(0x10000)に制限されています。
ダンプ画面1ページが0x1000バイトなので16ページ以上同じパターンが続く、16ページ以内にマーカが存在しない場合、JPEGセグメントではありません。
ダンプ画面上の[<<][>>]ボタンは16ページ前後します。
ダンプ画面で
キー、キーを押すと前後のマーカまで移動しますので、キーを使って探すと速いです。

JPEGイメージデータ領域
JPEGのイメージデータは長さの制限は有りませんが、圧縮されていますので必ずランダムなコードが続きます。
特定なコードや文字が繰り返したり、判読出来るような文字列が記録されることはありません。
イメージデータかどうかは色分けされた以下の2種類のコードの有無で判断してください。
これも一度正常なイメージデータのダンプを見ておくと判断しやすいです。

状態 イメージの可能性
0xFF00
(白)
点在する
ダンプ1画面分(1KB)に10個位は見つかる
イメージデータ
なし イメージデータではない
0xFF??
(赤)
なし リスタートインターバルなしのイメージデータ
RST(0xFFFD0〜0xFFD7)のみ リスタートインタバル有りのイメージデータ
下記以外のマーカが有る
SOS
(0xFFDA)…イメージの先頭
EOI
(0xFFD9)…イメージの末尾
RST(0xFFFD0〜0xFFD7)…イメージ中間
イメージデータではない

JPEG内部が壊れていそうなファイルは
JpegAnalyzerはJPEGファイル以外の別形式ファイルでも、内部のJPEG構造を解析表示できるように作られています。
そのため、JPEGマーカ・セグメントの構造矛盾があると読み飛ばすようになっており、同様にJPEGファイルであっても内部で破損があると一部のセグメントを読み飛ばしてしまう場合があります。

設定>マーカ・セグメント誤検出防止の下半分の設定は通常使用ではチェックONで、破損ファイルを扱う場合はチェックOFFで使用して下さい。
JPEGの断片ファイルや先頭が欠落しているファイルは
JPEGのヘッダー(SOIからSOSまで)やイメージデータの先頭が欠落すると通常は修復出来ません。
しかし、JPEGファイルの出力元がデジカメや特定のソフトの場合、同様の処理をしたJPEGファイルはヘッダー部分が同じか似た構造になります。
それを利用してヘッダー部分を付け替える事で画像が何が写っているか判るレベルまで修復出来る場合があります。

修復するには結構な手間が掛かりますが、どうしても諦め切れない写真などはデジタルカメラ画像のヘッダー修復例を参照して修復を試す事が出来ます。


解析例

実行形式ファイルの解析例 設定>マーカ・セグメント誤検出防止>全てON
Address Length Message
00000000     <=== 不明な領域 64,776 bytes
0000FD08 ****** EOI :End Of Image ******
0000FD0A     <=== 不明な領域 87,542 bytes

        ◆ イメージデータの断片かもしれません ◆
        ◆ EOIマーカ以降に 87542 バイトの無効なデータが有ります

     Analyze End.





←これはEOIを誤検出したので
 イメージデータの断片とパターンが
 同じために表示しています

実行形式ファイルの解析例 設定>マーカ・セグメント誤検出防止>全てOFF
Address Length Message
00000000     <=== 不明な領域 2,473 bytes
000009A9 [00FE] TRM :For temporary private use in arithmetic coding
         ▲ データ不足 252 bytes <$01>






〜〜〜〜〜途中省略〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
0002528D [AF82] ??? :Unknown Segment : $FF1A
         ▲ データ不足 44817 bytes <$40> ←マーカ、セグメントが誤検出され、
         ◆ SOIマーカが有りません ◆     エラーが多数出力されます。
         ◆ SOF セグメントが有りません ◆
         ◆ テーブル ( HT0-DC HT1-DC HT2-DC HT3-DC HT0-AC HT1-AC HT2-AC HT3-AC ) が有りません ◆
         ◆ SOSのDCT係数が欠落しています ◆ 0-63
         ◆ SOFセグメントに異常な部分が有ります ◆
         ◆ DQTセグメントに異常な部分が有ります ◆
         ◆ DHTセグメントに異常な部分が有ります ◆
         ◆ SOSセグメントに異常な部分が有ります ◆
         ◆ DRIセグメントが有りません ◆
         ◆ EOIマーカ以降に 87542 バイトの無効なデータが有ります ◆
        ◆ 異常な領域・セグメントがあります ◆


     Analyze End.
実行形式ファイルのダンプ例
Addr  + 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F Ascii Char
00000000 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 MZ..............
00000010 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ク.......@.......
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000030 00 00 00 00 00 00 00 00 00 00 00 00 C8 00 00 00 ............ネ...
00000040 0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68 ..コ..エ.ヘ!ク.Lヘ!
Th 
00000050 69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F
is program canno
00000060 74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20
t be run in DOS
00000070 6D 6F 64 65 2E 0D 0D 0A 24 00 00 00 00 00 00 00
mode....$.......
00000080 2D 3E BD D4 69 5F D3 87 69 5F D3 87 69 5F D3 87 ->スヤi_モ.i_モ.i_モ.
00000090 93 7C CA 87 64 5F D3 87 69 5F D2 87 17 5F D3 87 .|ハ.d_モ.i_メ.._モ.
000000A0 FE 7C 96 87 68 5F D3 87 B3 7C CF 87 71 5F D3 87 .|..h_モ.ウ|マ.q_モ.
000000B0 93 7C EE 87 68 5F D3 87 52 69 63 68 69 5F D3 87 .|..h_モ.Richi_モ.
000000C0 00 00 00 00 00 00 00 00 50 45 00 00 4C 01 03 00 ........PE..L...
000000D0 47 BC 31 3E 00 00 00 00 00 00 00 00 E0 00 0F 01 Gシ1>............
000000E0 0B 01 07 00 00 88 00 00 00 AC 01 00 00 00 00 00 .........ャ......
000000F0 69 5B 00 00 00 10 00 00 00 A0 00 00 00 00 00 01 i[.............






←このような文字列が見つかったら
 実行形式ファイルです

JPEGイメージデータ断片の解析例
Address Length Message
00000000     <=== 不明な領域 42,632 bytes
0000A688 ****** EOI :End Of Image ******

        ◆ イメージデータの断片かもしれません ◆

     Analyze End.
SOS以前が無くなっているので、通常修復出来ません。

参照:デジタルカメラ画像のヘッダー修復例

プログレッシブJPEGイメージデータ断片の解析例
Address Length Message
00000000     <=== 不明な領域 6,529 bytes
00001981 [0008] SOS :Start Of Scan 6-63[00]
         HT Selector[DC/AC] [-/2]
0000198B ****** Image Data ******
         Data Size 13,334 bytes
00004DA1 [0008] SOS :Start Of Scan 6-63[00]
         HT Selector[DC/AC] [-/1]
00004DAB ****** Image Data ******
         Data Size 155,046 bytes
0002AB51 ****** EOI :End Of Image ******

        ◆ SOIマーカが有りません ◆
        ◆ SOF セグメントが有りません ◆
        ◆ テーブル ( HT0-DC HT1-AC HT2-AC ) が有りません ◆
        ◆ ベースラインではSOSにテーブル ( HT2-AC ) は定義出来ません
        ◆ SOSのDCT係数が欠落しています ◆ 0-6

     Analyze End.


←量子化係数が6-63になっているので、
 プログレッシブ画像の一部です

 
ベースラインは0-63[00]になります

 プログレッシブ画像は必ず先頭の
 スキャンデータが必要です。
 このように途中からの画像データ
 だけでは表示可能なファイルには
 戻せません。

Top