1

我需要打开一个图像,验证图像,然后重新打开它(请参阅下面 PIL 文档引用的最后一句话)

im.verify()

尝试确定文件是否损坏,而不实际解码图像数据。如果此方法发现任何问题,它会引发适当的异常。此方法仅适用于新打开的图像;如果图像已经加载,则结果未定义。另外,如果您在使用此方法后需要加载图像,则必须重新打开图像文件。

这就是我的代码中picture的内容,django InMemoryUploadedFile 对象在哪里:

img = Image.open(picture)
img.verify()
img = Image.open(picture)

前两行工作正常,但第三行出现以下错误(我试图“重新打开”图像):

IOError: cannot identify image file

正如文档建议的那样,重新打开图像文件的正确方法是什么?

4

2 回答 2

5

这和做没有什么不同

f = open('x.png')
Image.open(f)
Image.open(f)

上面的代码不起作用,因为 PIL 在读取文件的前几个字节以(尝试)识别其格式时在文件中前进。Image.open如前所述,在这种情况下尝试使用第二个将失败,因为现在文件中的当前位置已超过其图像的标题。要确认这一点,您可以验证f.tell()返回的内容。要解决此问题,您必须f.seek(0)在两次调用之间返回文件的开头Image.open,或者关闭并重新打开文件。

于 2013-01-15T04:18:10.580 回答
1

尝试del img在 theverify和 second之间做一个open

于 2013-01-15T04:08:20.377 回答