gpt4 book ai didi

python - 从 URL 检索 JPG 图片 (Python)

转载 作者:行者123 更新时间:2023-11-30 23:40:43 25 4
gpt4 key购买 nike

我正在尝试使用以下 Python 代码从 http ULR 检索 JPG 图像(以在 GUI 中显示它们):

import urllib3
from cStringIO import StringIO
from PIL import Image

conn = urllib3.connection_from_url('http://www.solarspace.co.uk/')
img_file = conn.urlopen('GET', 'http://www.solarspace.co.uk/PlanetPics/Neptune/NeptuneAlt1.jpg')
image = StringIO(img_file.read())
image.seek(0)
resized_image = Image.open(image)

但是,这给了我这个错误消息:“IOError:无法识别图像文件”。

我使用 urllib3 的原因是因为我需要一个持久连接(发送多个请求),而 urllib/urllib2 不提供该连接。

提前致谢。

最佳答案

如果您使用 img_file.data 而不是 img_file.read(),似乎可以工作。 img_file.read() 旨在当您在请求上指定 preload_content=False 时使用。现在我想起来,这不是很直观,也许 img_file.read() 应该知道缓存的预加载内容,或者如果它已经被消耗,它可能应该引发异常。计划将 preload_content=False 设置为默认值,但事实证明,在正常使用情况下存在许多难以满足的边缘情况。我打开了一个错误以在将来修复此问题:https://github.com/shazow/urllib3/issues/102

无论如何,使用 img_file.data 应该可以解决您的问题。对困惑感到抱歉! :)

此外,我建议使用 conn.request(...) 而不是较低级别的 conn.urlopen(...),并且也许使用 PoolManager 如果您可能要跨域(真的没有理由不使用它)。试试这个:

>>> http = urllib3.PoolManager()
>>> r = http.request('GET', 'http://www.solarspace.co.uk/PlanetPics/Neptune/NeptuneAlt1.jpg')
>>> resized_image = Image.open(StringIO(r.data))

关于python - 从 URL 检索 JPG 图片 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12429088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com