誤ってごみ箱から削除してしまったファイルを復元したいときがある。デジカメで撮った写真が入っているフラッシュやSDメモリからパソコンのHDDに転送しているときに操作ミスやOSのクラッシュなどが原因で、写真ファイルが壊れてしまうこともある。そんなファイルを復元する方法について書いておく。以下では、圧縮された画像ファイルの復元と壊れた画像ファイル(JPG)の修復についてメモする。
削除ファイルの復元
数ある復元ソフトのなかで数年前から有名なのは、加藤 高明さんが作成した「復元」というソフトだろう。手元にあるのはVersion 4.2.8 (2004/11/9)だ。Vectorからフリーウェアとして配布されていたものだが、URL(http://www.vector.co.jp/soft/win95/util/se192983.html)が削除されていた。
「復元」はインストールする必要がなくフロッピーからも実行できる便利なソフト(約480KB)だ。復元用ソフトは、現在もVectorからたくさん配布されているがほとんどが有償の製品で、価格は5千円~1万5千円である。有料ソフトを購入する必要もないので、手持ちの「復元」を使った。Vistaでも実行できた。
今回は、下記のように最悪の状態だった。
- Nikonのデジカメで撮った写真が保存されているCFメモリ(1GB)をパソコンUSBに接続してHDDに複写した。
- 複写後、CFにある写真はすべて削除した。
- Vistaのファイル管理ソフトであるエクスプローラがフリーズしたので再起動した。再起動のときにごみ箱のファイルもすべて削除した。
- 再起動後、複写されたファイルもCFにあるファイルもすべて読めなくなっていた。エクスプローラでも写真管理ソフト(Picasa2)でも読めない。縮小画像が表示されず、開こうとすると、「このファイルは破損しています」というメッセージが表示される。
- Vistaは危険なので、XPでCFを接続しようとしたら、「フォーマットする必要があります」というメッセージが表示され接続できない。
- CFをクイックフォーマットする。一部のクラスタが上書きされるだけで、データはメモリに残っていることを祈る。もちろんファイル管理ソフトで覗くと真っ白だ。
「復元」ソフトを起動する。削除したファイルの名前に含まれる文字列を指定して検索できる。「DSC」で検索すると320個、
「JPG」で511個、使用されているクラスタもサイズがゼロのファイルも検索すると673個発見された。
復元したいファイル名を選択して、「コピーして復元」ボタンを押す。
ファイル名が見つかり復元されたように見えても、ファイルの中身が正しいという保証はまったくない。たとえばDSC1841.JPGは11月1日に撮影した写真のファイル名だが、WindowsのエクスプローラやPicasa2では読めない。後述するJpegAnalyzerで読むと、一部の画像データが表示されるが、その断片は6月に撮影した伊勢神宮の写真である。
復元したファイル名や日付が違うファイルに、求める画像データがある可能性がある。したがって、ファイル名に含まれる文字列「JPG」で検索・復元したファイルをJpegAnalyzerを使って調べるのがいい。たとえば、ファイル名 $035_01.jpg の中で、二つの写真が見つかった。いずれも11月1日に撮影した写真だった。
破損したJPGファイルの復元
破損したJPG画像を修復するソフト「Jpeg Remember」(184MB)がある。フリーソフトといっているが実際はライセンスを購入(シングル3360円)しないと使えない。15日間試用できるが、機能が制限されており、たとえ修復できても保存はできない。試用したがどのファイルも読み込めなかった。売り物になるソフトとは思えない。
かみさかさんが作成したJpegAnalyzer Plus V1.42 を使った。1.7MBの軽量級だが、184MBもある有料のJpegRememberよりも有用であることが分かった。以下JpegAnalyzerを使った解析と復元を試みた経過である。
JpegAnalyzerを起動して、破損画像ファイルをドラグ&ドロップすると解析してくれる。一連のまとまった画像データがあるとプレビュー表示してくれる。
JPGファイルの先頭が「不明な領域」になっているため、普通の画像ソフトでは読めない。JPGファイルでは先頭がSOI (Start Of Imageでなければいけない。しかし、先頭領域が破損していても、JpegAnalyzerは読み込んでくれる。
00000000 <=== 不明な領域 36,352 bytes
この領域を削除すると、先頭がSOIになる。これを保存すると、JPGファイルだと認識され、エクスプローラやPicasa2で読める。SOF0に書かれている写真の大きさが230x318で、イメージデータサイズは11KBなのに、保存したファイルのサイズは613KBある。これはSOI~EOIのセグメントが22個もあるからだ。
ファイル名が $SC_1405.JPG となっているが、ファイル名そのものが代わっており、ファイルと認識されているデータの集まりは、実際には壊れた画像ファイルの残片が連なっているということだ。
その中のひとつのSOI~EOIの領域を選択して、「「領域画像表示」をすると別の写真が表示される。つまり、必要なSOI~EOI以外の領域を削除すればいい。先頭のSOI~EOI領域だけを残して保存すると、元の写真ファイル(11KB)になる。
復元した$SC_1405.jpgファイルからは、320x240程度の大きさの写真が20枚含まれていた。当然のことだが、サイズが小さい写真ほど破損せずに完全な形で残っている確率が高い。下記は、壊れた画像ファイル(左端613KB)から、JpegAnalyzerを使って復元した画像の例である。
復元できる確率
- ドライブに十分な空き容量があり、削除直後の場合は高い確率で正常に復元できる。
- 小さいファイルのほうが断片化されることが少ないため元のデータを復元できる可能性が高い。
- 大きいファイルは断片化したり上書きされて破損する確率が高くなる。
- ひとつの復元ファイルの中に複数の元データが含まれていることがある。
- 復元ファイル名が、元のファイル名とは限らず、その中身が復元されたとはいえない。
- 別名の復元ファイルの中に、求める画像データがそっくり残っている場合がある。
- 画像ファイルの場合、先頭が壊れていると普通の画像ソフトでは読めない。しかし、JpegAnalyzerなどの修復ソフトを使えば、復元できることがある。