Python - 如何从URL读取图像?

时间:2016-12-01 12:52:25

标签: python

我是Python的新手,我正试图弄清楚如何从网址中读取图片。

这是我目前的代码:

from PIL import Image
import urllib.request, io

URL = 'http://www.w3schools.com/css/trolltunga.jpg'

with urllib.request.urlopen(URL) as url:
    s = url.read()
    Image.open(s)

我收到以下错误:

C:\python>python image.py
Traceback (most recent call last):
  File "image.py", line 8, in <module>
    Image.open(s)
  File "C:\Anaconda3\lib\site-packages\PIL\Image.py", line 2272, in open
    fp = builtins.open(filename, "rb")
ValueError: embedded null byte

我不知道这意味着什么。我做错了什么?

4 个答案:

答案 0 :(得分:9)

Image.open()需要文件名或文件类对象 - 而不是文件数据。

您可以在本地写图像 - 即"temp.jpg" - 然后打开它

from PIL import Image
import urllib.request

URL = 'http://www.w3schools.com/css/trolltunga.jpg'

with urllib.request.urlopen(URL) as url:
    with open('temp.jpg', 'wb') as f:
        f.write(url.read())

img = Image.open('temp.jpg')

img.show()

或者您可以使用io模块

在内存中创建类文件对象
from PIL import Image
import urllib.request
import io

URL = 'http://www.w3schools.com/css/trolltunga.jpg'

with urllib.request.urlopen(URL) as url:
    f = io.BytesIO(url.read())

img = Image.open(f)

img.show()

答案 1 :(得分:4)

以下是使用scikit-image

从网址读取图片的方法
from skimage import io

io.imshow(io.imread("http://www.w3schools.com/css/trolltunga.jpg"))
io.show()

注意:io.imread()返回一个numpy数组

答案 2 :(得分:0)

首先,您可以先将图像下载到当前的工作目录

from urllib.request import urlretrieve

url = 'http://www.w3schools.com/css/trolltunga.jpg'
urlretrieve(url, 'pic.jpg')

然后在本地打开/阅读:

from PIL import Image
img = Image.open('pic.jpg')

# For example, check image size and format
print(img.size)
print(img.format)

img.show()

答案 3 :(得分:0)

根据this stack overflow answer的建议,你可以这样做:

import urllib, cStringIO
from PIL import Image

file = cStringIO.StringIO(urllib.urlopen(URL).read())
img = Image.open(file)

然后你可以自由使用你的图像。 例如,您可以将其转换为numpy数组:

img_npy = np.array(img)