Jak odczytać dane obrazu z adresu URL w Pythonie?
To, co próbuję zrobić, jest dość proste, gdy mamy do czynienia z lokalnym plikiem, ale problem pojawia się, gdy próbuję to zrobić za pomocą ZDALNEGO ADRESU URL.
Zasadniczo próbuję utworzyć obiekt obrazu PIL z pliku pobranego z adresu URL. Oczywiście, zawsze mogę po prostu pobrać adres URL i zapisać go w pliku tymczasowym, a następnie otworzyć go w obiekcie obrazu, ale wydaje się to bardzo nieefektywne.
Oto co mam:
Image.open(urlopen(url))
To się skarży, że {[2] }nie jest dostępny, więc próbowałem to:
Image.open(urlopen(url).read())
Ale to też nie zadziałało. Czy istnieje lepszy sposób, aby to zrobić, czy zapis do pliku tymczasowego jest akceptowanym sposobem robienia tego typu rzeczy? 8 answers
Możesz spróbować użyć StringIO
import urllib, cStringIO
file = cStringIO.StringIO(urllib.urlopen(URL).read())
img = Image.open(file)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-12 18:07:32
W Python3 Moduły StringIO i cStringIO zniknęły.
W Python3 powinieneś użyć:
from PIL import Image
import requests
from io import BytesIO
response = requests.get(url)
img = Image.open(BytesIO(response.content))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-06 08:30:57
Używam biblioteki requests. Wydaje się być bardziej wytrzymały.
from PIL import Image
import requests
from StringIO import StringIO
response = requests.get(url)
img = Image.open(StringIO(response.content))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-23 06:19:24
Dla tych z Was, którzy używają Poduszki, od wersji 2.8.0 można:
from PIL import Image
import urllib2
im = Image.open(urllib2.urlopen(url))
Lub jeśli użyjesz requests
:
from PIL import Image
import requests
im = Image.open(requests.get(url, stream=True).raw)
Bibliografia:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-03 04:14:20
Użyj StringIO
, aby przekształcić odczytany łańcuch w obiekt podobny do pliku:
from StringIO import StringIO
import urllib
Image.open(StringIO(urllib.urlopen(url).read()))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-02 07:45:17
Dla tych, którzy wykonują jakieś sklearn / numpy post processing (tj. Deep learning), możesz owinąć obiekt pil za pomocą np.array (). To może uchronić Cię przed koniecznością Wygooglowania go tak, jak ja:
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)))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-17 15:59:44
Wybierz obraz w chrome, kliknij prawym przyciskiem myszy na nim, kliknij na Copy image address
, wklej go do zmiennej str
(my_url
), Aby odczytać obraz:
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
Otwórz;
from PIL import Image
img = Image.open('my_image.png')
img.show()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-30 20:53:32
To działa również na Pythonie 3.6...
from urllib.request import urlopen
from PIL import Image
img = Image.open(urlopen(url))
img
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-05 05:18:45