2011-02-28 14 views
2

私は、写真が壊れているかどうかを判断し、それに応じてタグ付けする必要があるという要件があります。写真が壊れているかどうかを確認するには?

もう1つのことは、画像に間違った拡張があるかどうかを判断することです。間違った拡張の意味は、時にはjpgの拡張子を持つ写真に出会ったことがあるのですが、この写真をIrfanViewに読み込むと、その写真は拡張子とは異なる形式であることが報告されます。

どのように私はこれをデルファイで行うことができます。

答えて

13

私は、写真が破損しているかどうかを判断し、それに応じてタグ付けする必要があるという要件があります。

いくつかのことを試すことができますが、特定のファイル形式(例:BMP、ある程度のJPEG)では、人間だけが最終的にファイルがOKか破損しているかどうかを判断できます。最も簡単なテストは、ファイルを対応するオブジェクト(TJpegImage、TPngObjectなど)にロードすることです。読み込み中に例外が発生した場合は、必ず破損したファイルがあります。残念なことに例外が発生しなければ、ファイルが壊れていないとは本当に言えません。私は、Delphi TImageにうまくロードされ、WindowsのImage Viewerで開くことができる破損したJPEGファイルを見たことがありますが、人間の観察者には明らかに壊れています。 BMPイメージでは、ビットマップを開き、ファイルの中央にあるいくつかのバイトを上書きし、ビューアで開くことがより明確になります。ビットマップの途中で間違った色のビットが実際に間違っていると自動システムがどのように伝えることができますか?

もう1つのことは、画像に間違った拡張があるかどうかを判断することです。間違った拡張の意味は、時にはjpgの拡張子を持つ写真に出会ったことがあるのですが、この写真をIrfanViewに読み込むと、その写真は拡張子とは異なる形式であることが報告されます。

ファイルの拡張子に対応するオブジェクトにファイルをロードしようとしていますが、失敗した場合は他の形式で開こうとしますか?これは簡単なはずです。

また、イメージヘッダーを調べることもできます。ほとんどのファイル形式は、短い署名(数バイト)で始まります。すべてのイメージファイル形式のドキュメントを参照してシグネチャを検索するか、多数のファイルを開いて最初の4バイトのパターンを探すだけです。すべてのイメージファイル形式の適切なドキュメントを見つけることは難しいかもしれないので、私はこの第2の選択肢に行くだろう。

+0

同意すると、最初の部分(この画像は壊れていますか?)は、例外を発生させない2番目の形式を見つけることができないと判断できます。 – Argalatyr

+0

情報ありがとうございます。また、ファイルが破損しているかどうかを検出することはほとんど不可能であるという同じ結論に至りました。 –

2

ファイルが破損していないかどうかを確認する唯一の方法は、ファイル形式で記述されているとおりに読み取ることです。 BMPを読み込みBMPヘッダー、BMPデータなどとともにBMPとして読み込みます。グラフィックスファイル形式を記述する多くのWebページがあります。もちろん、ファイルを送信し、送信後に破損する恐れがある場合は、そのようなファイルをCRC32、または暗号MD5またはSHA1のようないくつかの合計で保存してください。そして、計算した合計がオリジナルと同じであるかどうかを確認してください。

デルファイでは、ユニットjpegとタイプTJPEGImageTBitmapがあります。データをロードして例外をチェックしてみてください。他のフォーマットでは、多くのライブラリがあり、必要なファイルフォーマットを探すだけです。

ファイルの拡張子が良いかどうかを確認するには、ファイルの最初のバイトを読み取り、グラフィックファイルヘッダーの辞書で確認してください。たとえば、GIFファイルはGIFで始まり、BMPファイルはBMで始まり、JPEGヘッダではJFIFとなります。私はUNIXユーティリティfileがこのように動作すると思います。

2

あなたは「要件」という言葉を使用していたので、あなたは誰かのために仕事をしていると思われます。したがって、コードを心配する前に要件を守るようにしてください。

IMOでは、テストケースのサンプルを入手する必要があります。言及された他のものとして、ファイルを特定のフォーマットとしてロードすることは1つのテストになります。しかし、OKをロードする.jpgについては、下の3番目は欠けていますか?またはOKをロードしますが、途中でエラーが発生した途中で緑色の「静的な」行がありますが(カメラ、Photoshopなど)、処理が回復して再開された.jpgですか?この場合、.jpgに実際に緑色の線が表示されることがあります。それは "腐敗"と考えられているのでしょうか?これは特に契約業務の場合は注意が必要な場所です。

+0

私たちは、メモリカードから失われたデータを回復するためのユーティリティを開発しました。私たちの顧客のほとんどはフォトグラファー(プロとアマチュアの両方)であり、現在は修復されたファイルが破損しているかどうかを検出する機能を構築しています。 –

関連する問題