Python PIL - 从文件对象打开图像:文件未打开以供阅读

时间:2014-12-29 12:56:44

标签: python python-imaging-library pillow

imgfile = open('myimage.png', 'wb')
imgfile.write(decodestring(base64_image))

f = Image.open(imgfile)

imgfile.close()

我能够将write() base64字符串作为图像导入imgfile。但是当我尝试用PIL打开这个文件时,我正在

File not open for reading
我做错了什么?

2 个答案:

答案 0 :(得分:2)

您打开文件进行写入,而不是阅读。您必须使用双模式,并首先回放文件指针:

with open('myimage.png', 'w+b') as imgfile:
    imgfile.write(decodestring(base64_image))
    imgfile.seek(0)
    f = Image.open(imgfile)

此处w+表示撰写和阅读,请参阅open() documentation

  

'+'
  打开磁盘文件进行更新(读写)

     

对于二进制读写访问,模式'w+b'打开并将文件截断为0字节。 'r+b'打开文件而不截断。

但是,这里确实没有必要在磁盘上使用文件;改为使用内存文件:

from io import BytesIO

imgfile = BytesIO(decodestring(base64_image))
f = Image.open(imgfile)

答案 1 :(得分:0)

此处的问题是您使用wb打开撰写的文件,并使用w+b打开以供阅读。

详细解释in the docs here