我是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
我不知道这意味着什么。我做错了什么?
答案 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)