PIL:验证后如何重新打开图像?

sga*_*a62 1 python image python-imaging-library

我需要打开一个图像,验证图像,然后重新打开它(参见以下PIL文档引用的句子)

im.verify()

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

这就是我在我的代码中picture所拥有的,其中是一个django InMemoryUploadedFile对象:

img = Image.open(picture)
img.verify()
img = Image.open(picture)
Run Code Online (Sandbox Code Playgroud)

前两行工作正常,但我得到第三行的以下错误(我试图"重新打开"图像):

IOError: cannot identify image file

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

mmg*_*mgp 5

这和做的没什么不同

f = open('x.png')
Image.open(f)
Image.open(f)
Run Code Online (Sandbox Code Playgroud)

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