我正在使用 Drive API 下载图像。根据他们在 Python 中下载文件的文档,我最终得到了fh
一个填充io.BytesIO
实例的变量。我尝试将其保存为图像:
file_id = "0BwyLGoHzn5uIOHVycFZpSEwycnViUjFYQXR5Nnp6QjBrLXJR"
request = service.files().get_media(fileId=file_id)
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
print('Download {} {}%.'.format(file['name'],
int(status.progress() * 100)))
fh.seek(0)
image = Image.open(fh) # error
错误是:cannot identify image file <_io.BytesIO object at 0x106cba890>
。实际上,错误不会发生在另一张图像上,而是在大多数图像中引发,包括我在本文开头链接的那个。
阅读此答案后,我将最后一行更改为:
byteImg = fh.read()
dataBytesIO = io.BytesIO(byteImg)
image = Image.open(dataBytesIO) # still the same error
我也试过这个答案,我将第一个代码块的最后一行更改为
byteImg = fh.read()
image = Image.open(StringIO(byteImg))
但我仍然得到一个cannot identify image file <StringIO.StringIO instance at 0x106471e60>
错误。
我试过使用替代品(请求,urllib)但没有结果。Image.open
如果我手动下载图像,我可以。
此错误在一个月前不存在,并且最近在此代码所在的应用程序中弹出。我花了几天时间调试此错误但没有成功,最终将问题提交给 Stack Overflow。我正在使用from PIL import Image
.