2016-12-01 19 views
2

私はPythonについて全く新しく、URLから画像を読み込む方法を理解しようとしています。ここでPython - URLからイメージを読み込むには?

は私の現在のコードです:

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 

私は、このいずれかが何を意味するのか見当がつかない。私は間違って何をしていますか?そもそも

+2

( 'オープンを返しio.imread())'ファイル名ではなく、データを期待 - '' Image.open( 'temp.jpg') - ので、あなたがローカルでイメージを書いて、それを開く必要があります。または、io.BytesIOを使用してメモリ内にファイルオブジェクトを作成します。 – furas

+1

イメージを読んだら、そのイメージで何をしたいですか? –

答えて

2

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() 
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() 
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) 
2

を使用してメモリ内のファイルのようなオブジェクトを作成することができ、それを開くには、ここで読み取る方法ですURLの画像はscikit-image

from skimage import io 

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

注:numpyの配列

関連する問題