Python下载图像为numpy数组时崩溃

2 投票
1 回答
1327 浏览
提问于 2025-04-17 17:44

为什么下面的代码会让Python崩溃呢?有没有更简单或者更好的方法来下载一张图片并把它转换成numpy数组呢?

from pylab import *
from urllib import request
captcha=imread(request.urlopen('http://pastebin.com/etc/CaptchaSecurityImages.php?width=100&height=35&characters=4&b=123'))

请注意,这段代码会导致Python解释器直接退出,而不仅仅是打印出错误信息。

1 个回答

7

有几个问题:

  1. imread 不能识别图片类型,所以默认使用 png 格式。
  2. matplotlib 的 _png.read_png 在 Python 3 中与 urllib.request 对象一起使用时会崩溃
  3. request.urlopen 对象缺少一个 seek 函数,无法与 PIL 一起使用(PIL 是 matplotlib 用来读取非 png 格式图片的库)。

这段代码在 win-amd64-py3.3 上对我有效:

from pylab import *
from urllib import request
from io import BytesIO
url = 'http://pastebin.com/etc/CaptchaSecurityImages.php?width=100&height=35&characters=4&b=123'
data = BytesIO(request.urlopen(url).read())
captcha = imread(data, format='jpg')

撰写回答