Python下载图像为numpy数组时崩溃
为什么下面的代码会让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
有几个问题:
imread
不能识别图片类型,所以默认使用png
格式。- matplotlib 的 _png.read_png 在 Python 3 中与 urllib.request 对象一起使用时会崩溃。
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')