Как прочитать данные изображения из URL-адреса в Python?
то, что я пытаюсь сделать, довольно просто, когда мы имеем дело с локальным файлом, но проблема возникает, когда я пытаюсь сделать это с помощью удаленного URL.
В основном, я пытаюсь создать объект изображения PIL из файла, извлеченного из URL-адреса. Конечно, я всегда могу просто получить URL-адрес и сохранить его во временном файле, а затем открыть его в объект изображения, но это очень неэффективно.
вот что у меня есть:
Image.open(urlopen(url))
он хлопает, жалуясь, что seek() не доступно, поэтому я попробовал это:
Image.open(urlopen(url).read())
но это не сработало. Есть ли лучший способ сделать это, или запись во временный файл является общепринятым способом делать такие вещи?
8 ответов:
вы можете попробовать использовать StringIO
import urllib, cStringIO file = cStringIO.StringIO(urllib.urlopen(URL).read()) img = Image.open(file)
в Python3 модули StringIO и cStringIO исчезли.
в Python3 вы должны использовать:
from PIL import Image import requests from io import BytesIO response = requests.get(url) img = Image.open(BytesIO(response.content))
Я использую библиотеку запросов. Он кажется более прочным.
from PIL import Image import requests from StringIO import StringIO response = requests.get(url) img = Image.open(StringIO(response.content))
для тех из вас, кто использует подушку, с версии 2.8.0 вы можете:
from PIL import Image import urllib2 im = Image.open(urllib2.urlopen(url))или
requests:from PIL import Image import requests im = Image.open(requests.get(url, stream=True).raw)ссылки:
использовать
StringIOчтобы превратить строку чтения в файлоподобный объект:from StringIO import StringIO import urllib Image.open(StringIO(urllib.urlopen(url).read()))
для тех, кто делает некоторую постобработку sklearn/numpy (т. е. глубокое обучение), вы можете обернуть объект PIL с помощью np.матрица.)( Это может спасти вас от необходимости Google, как я сделал:
from PIL import Image import requests import numpy as np from StringIO import StringIO response = requests.get(url) img = np.array(Image.open(StringIO(response.content)))
выберите изображение в chrome, щелкните правой кнопкой мыши на нем, нажмите на
Copy image address, вставить вstrпеременной (my_url), чтобы прочитать изображения:import shutil import requests my_url = 'https://www.washingtonian.com/wp-content/uploads/2017/06/6-30-17-goat-yoga-congressional-cemetery-1-994x559.jpg' response = requests.get(my_url, stream=True) with open('my_image.png', 'wb') as file: shutil.copyfileobj(response.raw, file) del responseоткрыть его;
from PIL import Image img = Image.open('my_image.png') img.show()
это работает и на Python 3.6...
from urllib.request import urlopen from PIL import Image img = Image.open(urlopen(url)) img
Comments