使用PIL和请求下载图像

瓦西里

我正在尝试通过url下载原始图像(png格式),即时对其进行转换(不保存到光盘)并另存为jpg。

代码如下:

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

那么有可能监视下载进度以及获取数据本身之后的情况吗?

数据库

使用时r.iter_content(),您需要将结果缓冲在某处。不幸的是,我找不到任何将内容附加到内存中的对象的示例,通常iter_content用于无法或不应该将文件一次全部加载到内存中的情况。但是,您可以tempfile.SpooledTemporaryFile按照此答案中的说明使用对其进行缓冲https : //stackoverflow.com/a/18550652/4527093这将防止将映像保存到磁盘(除非映像大于指定的大小max_size)。然后,您可以Image创建tempfile

import os
import io
import requests
from PIL import Image
import tempfile

buffer = tempfile.SpooledTemporaryFile(max_size=1e9)
r = requests.get(img_url, stream=True)
if r.status_code == 200:
    downloaded = 0
    filesize = int(r.headers['content-length'])
    for chunk in r.iter_content(chunk_size=1024):
        downloaded += len(chunk)
        buffer.write(chunk)
        print(downloaded/filesize)
    buffer.seek(0)
    i = Image.open(io.BytesIO(buffer.read()))
    i.save(os.path.join(out_dir, 'image.jpg'), quality=85)
buffer.close()

编辑为include chunk_size,这会将更新限制为每1kb而不是每个字节进行一次更新。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django的。下载带有请求的图像-使用PIL编辑-保存到模型

来自分类Dev

Node.js-使用“请求”和“节点画布”下载并处理图像

来自分类Dev

如何使用Java套接字HTTP / 1.1请求下载图像?

来自分类Dev

使用请求下载有限制的图像

来自分类Dev

使用tinytag和PIL诱使字节到图像

来自分类Dev

如何使用请求衡量下载速度和进度?

来自分类Dev

如何使用Windows.Web.Http下载和存储图像?

来自分类Dev

如何使用Carrierwave下载和存储远程图像URL

来自分类Dev

Swift IOS:如何使用NSURLSession和didReciveData下载图像?

来自分类Dev

使用CSV文件和python的多个图像下载器

来自分类Dev

使用Asyncio和Aiohttp下载数千张图像

来自分类Dev

如何使用Windows.Web.Http下载和存储图像?

来自分类Dev

使用PIL随机选择图像

来自分类Dev

使用PIL从词典创建图像

来自分类Dev

使用Python下载图像

来自分类Dev

从HTTP请求下载图像触发断点

来自分类Dev

如何使用相同的会话和不同的下载任务下载多个图像

来自分类Dev

如何使用wget仅下载html文件而不下载Flash内容(图像和CSS表格)?

来自分类Dev

使用CSV进行URL扫描的带有节点请求的下载图像

来自分类Dev

无法使用python url中的请求下载图像,将HTML发送给我?

来自分类Dev

使用CSV进行URL扫描的带有节点请求的下载图像

来自分类Dev

使用python请求下载CSV

来自分类Dev

使用PIL和NumPy查找一组图片的中值可得到黑白图像

来自分类Dev

为什么使用PIL和pytorch对图像进行双线性缩放会产生不同的结果?

来自分类Dev

使用NSURLSession下载大量图像

来自分类Dev

使用Android WebView下载图像

来自分类Dev

使用异步任务下载图像

来自分类Dev

强制使用htaccess下载图像

来自分类Dev

无法使用Promise下载图像

Related 相关文章

  1. 1

    Django的。下载带有请求的图像-使用PIL编辑-保存到模型

  2. 2

    Node.js-使用“请求”和“节点画布”下载并处理图像

  3. 3

    如何使用Java套接字HTTP / 1.1请求下载图像?

  4. 4

    使用请求下载有限制的图像

  5. 5

    使用tinytag和PIL诱使字节到图像

  6. 6

    如何使用请求衡量下载速度和进度?

  7. 7

    如何使用Windows.Web.Http下载和存储图像?

  8. 8

    如何使用Carrierwave下载和存储远程图像URL

  9. 9

    Swift IOS:如何使用NSURLSession和didReciveData下载图像?

  10. 10

    使用CSV文件和python的多个图像下载器

  11. 11

    使用Asyncio和Aiohttp下载数千张图像

  12. 12

    如何使用Windows.Web.Http下载和存储图像?

  13. 13

    使用PIL随机选择图像

  14. 14

    使用PIL从词典创建图像

  15. 15

    使用Python下载图像

  16. 16

    从HTTP请求下载图像触发断点

  17. 17

    如何使用相同的会话和不同的下载任务下载多个图像

  18. 18

    如何使用wget仅下载html文件而不下载Flash内容(图像和CSS表格)?

  19. 19

    使用CSV进行URL扫描的带有节点请求的下载图像

  20. 20

    无法使用python url中的请求下载图像,将HTML发送给我?

  21. 21

    使用CSV进行URL扫描的带有节点请求的下载图像

  22. 22

    使用python请求下载CSV

  23. 23

    使用PIL和NumPy查找一组图片的中值可得到黑白图像

  24. 24

    为什么使用PIL和pytorch对图像进行双线性缩放会产生不同的结果?

  25. 25

    使用NSURLSession下载大量图像

  26. 26

    使用Android WebView下载图像

  27. 27

    使用异步任务下载图像

  28. 28

    强制使用htaccess下载图像

  29. 29

    无法使用Promise下载图像

热门标签

归档