1
我想下载一个原始图像(PNG格式)的网址,转换它在飞行(不保存到光盘)并保存为JPG格式。下载图像与PIL和请求
的代码如下:
import os
import io
import requests
from PIL import Image
...
r = requests.get(img_url, stream=True)
if r.status_code == 200:
i = Image.open(io.BytesIO(r.content))
i.save(os.path.join(out_dir, 'image.jpg'), quality=85)
它的工作原理,但是当我尝试监视下载进度(为将来的进度条)与r.iter_content()这样的:
r = requests.get(img_url, stream=True)
if r.status_code == 200:
for chunk in r.iter_content():
print(len(chunk))
i = Image.open(io.BytesIO(r.content))
i.save(os.path.join(out_dir, 'image.jpg'), quality=85)
我得到这个错误:
Traceback (most recent call last):
File "E:/GitHub/geoportal/quicklookScrape/temp.py", line 37, in <module>
i = Image.open(io.BytesIO(r.content))
File "C:\Python35\lib\site-packages\requests\models.py", line 736, in content
'The content for this response was already consumed')
RuntimeError: The content for this response was already consumed
所以有可能监视下载进度和获得数据后本身?
非常感谢dbc!而如果我只是使用普通的TemporaryFile呢? '用TemporaryFile()作为tempf:',将'chunks'写入它,然后用'i = Image.open(tempf)'读取它?这不是更容易吗? – Vasily
这是行得通的,但使用'TemporaryFile'实际上将字节写入到磁盘中。使用'SpooledTemporaryFile'将字节保存在内存中,因此可能会更快 - 并且这是您在问题中指定的内容。 :) – dbc