更新
また、GitHubの Pythonスクリプトに次のソリューションを実装しました。
破損したファイル(jpg)が頻繁に「壊れた」画像ではないことも確認しました。つまり、破損した画像ファイルが正当な画像ファイルとして残る場合があり、元の画像が失われたり変更されたりしても、エラーなしで読み込むことができます。ただし、ファイルの切り捨てにより常にエラーが発生します。
更新を終了
あなたはPythonを使うことができます ほとんどの画像形式で Pillow(PIL)モジュールを使用して、ファイルが有効で完全な画像ファイルであるかどうかを確認できます。
壊れた画像も検出することを目的とする場合、@ Nadia Alramliは正しくim.verify()
方法を提案しますが、これはすべての起こり得る画像の欠陥を検出するわけではありません、例えば、im.verify
(ほとんどの視聴者は多くの場合、灰色のエリアにロードすること)切り捨てられた画像を検出しません。
枕もこれらのタイプの欠陥を検出できますが、画像操作または画像デコード/再コード化を適用するか、チェックをトリガーする必要があります。最後に、このコードを使用することをお勧めします:
try:
im = Image.load(filename)
im.verify() #I perform also verify, don't know if he sees other types o defects
im.close() #reload is necessary in my case
im = Image.load(filename)
im.transpose(PIL.Image.FLIP_LEFT_RIGHT)
im.close()
except:
#manage excetions here
画像に欠陥がある場合、このコードは例外を発生させます。im.verifyは、画像操作を実行するよりも約100倍高速であることを考慮してください(フリップは安価な変換の1つだと思います)。このコードを使用して、標準の枕で約10メガバイト/秒、または枕-SIMDモジュール(最新の2.5 GHz x86_64 CPU)で40メガバイト/秒で一連の画像を検証します。
他の形式のpsd、xcf、...の場合、ImagemagickラッパーWandを使用できます。コードは次のとおりです。
im = wand.image.Image(filename=filename)
temp = im.flip;
im.close()
しかし、私の実験では、ワンドは切り詰められた画像を検出しないため、プロンプトなしで灰色の領域として不足しているパーツをロードすると思います。
Imagemagickに、ジョブを作成できる外部コマンドの識別があることを知らせましたが、その関数をプログラムで呼び出す方法が見つからず、このルートをテストしていません。
私はいつも事前チェックを実行することをお勧め、チェックファイルサイズをゼロ(または非常に小さい)ではないと、非常にある安価なアイデア:
statfile = os.stat(filename)
filesize = statfile.st_size
if filesize == 0:
#manage here the 'faulty image' case