如何检查一个文件是否是有效的图像文件?

155 投票
11 回答
198937 浏览
提问于 2025-04-15 11:43

我现在正在使用PIL这个库。

from PIL import Image

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

不过,虽然这个库能处理大部分情况,但有些图片文件,比如xcf、svg和psd格式的文件却无法被识别。特别是psd文件,会出现一个叫OverflowError的错误。

有没有什么办法可以把这些文件也包含进来呢?

11 个回答

56

除了Brian提到的建议,你还可以使用PIL库的verify方法来检查文件是否损坏。

im.verify()

这个方法会尝试判断文件是否损坏,而不需要实际解码图像数据。如果这个方法发现了任何问题,它会抛出相应的错误提示。需要注意的是,这个方法只能在新打开的图像上使用;如果图像已经加载过了,结果就不确定了。此外,如果你在使用这个方法后还需要加载图像,你必须重新打开图像文件。

258

你可以使用内置的 imghdr 模块。根据它的说明:

imghdr 模块可以判断一个文件或字节流中包含的图片类型。

这是使用它的方法:

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

注意:从 Python 3.11 开始,imghdr 模块已经 不再推荐使用,因为它只支持很少的文件格式。

16

很多时候,文件的前几个字符会是一些特定的数字,这些数字被称为“魔数”,用来表示不同的文件格式。你可以在上面提到的异常检查之外,额外检查一下这些魔数。

撰写回答