132

現在、PILを使用しています。

from PIL import Image
try:
    im=Image.open(filename)
    # do stuff
except IOError:
    # filename not an image file

ただし、これはほとんどの場合を十分にカバーしますが、xcf、svg、psdなどの一部の画像ファイルは検出されません。PsdファイルはOverflowError例外をスローします。

どういうわけか私もそれらを含めることができますか?

4

9 に答える 9

238

組み込みのimghdrモジュールを見つけました。Pythonのドキュメントから:

imghdr モジュールは、ファイルまたはバイト ストリームに含まれるイメージのタイプを決定します。

これがどのように機能するかです:

>>> import imghdr
>>> imghdr.what('/tmp/bass')
'gif'

モジュールを使用することは、同様の機能を再実装するよりもはるかに優れています

于 2009-05-24T00:29:03.123 に答える
54

ブライアンが提案していることに加えて、PIL の検証メソッドを使用して、ファイルが壊れているかどうかを確認できます。

im.verify()

画像データを実際にデコードせずに、ファイルが壊れているかどうかを判断しようとします。このメソッドで問題が見つかった場合は、適切な例外が発生します。このメソッドは、新しく開いた画像に対してのみ機能します。イメージが既にロードされている場合、結果は未定義です。また、この方法を使用した後にイメージをロードする必要がある場合は、イメージ ファイルを再度開く必要があります。属性

于 2009-05-20T19:02:45.300 に答える
17

多くの場合、最初の数文字はさまざまなファイル形式のマジック ナンバーです。上記の例外チェックに加えて、これをチェックできます。

于 2009-05-20T17:58:26.133 に答える
7

Linux では、libmagicを使用してファイル形式を識別するpython-magicを使用できます。

私の知る限り、libmagicはファイルを調べて、ビットマップの寸法、フォーマットのバージョンなど、フォーマットだけでなく、それについてもっと伝えようとします。したがって、これは「有効性」の表面的なテストと見なされるかもしれません。

「有効」の他の定義については、独自のテストを作成する必要がある場合があります。

于 2009-05-20T18:05:40.487 に答える
6

libmagic、python-magicへの Python バインディングを使用してから、MIME タイプを確認できます。ファイルが破損しているか無傷かはわかりませんが、画像の種類を特定できるはずです。

于 2009-05-20T19:29:00.193 に答える