To, co próbuję zrobić, jest dość proste, gdy mamy do czynienia z plikiem lokalnym, 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. Jasne, zawsze mogę 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))
Płatki narzekają, że seek()
nie są dostępne, więc spróbowałem:
Image.open(urlopen(url).read())
Ale to też nie działało. Czy istnieje lepszy sposób, aby to zrobić, czy też zapisywanie w pliku tymczasowym jest akceptowanym sposobem wykonywania tego rodzaju czynności?
python
python-imaging-library
Daniel Quinn
źródło
źródło
Odpowiedzi:
W Python3 nie ma modułów StringIO i cStringIO.
W Python3 powinieneś użyć:
źródło
requests
pakiet zgłasza kod stanu 503 podczas pobierania obrazu z adresu URL. Zamiast tego musiałemhttp.client
skorzystać z obrazu.Image.open(response.raw)
. PIL automatycznie sprawdza to teraz i wykonuje zawijanie BytesIO pod maską. Od: pillow.readthedocs.io/en/3.0.x/releasenotes/2.8.0.htmlmożesz spróbować użyć StringIO
źródło
Korzystam z biblioteki żądań. Wydaje się być bardziej solidny.
źródło
pip3.4 install pillow
.Dla tych, którzy korzystają z Pillow, od wersji 2.8.0 możesz:
lub jeśli używasz
requests
:Bibliografia:
źródło
Użyj,
StringIO
aby zmienić ciąg odczytywany w obiekt podobny do pliku:źródło
Dla tych, którzy wykonują niektóre przetwarzanie końcowe sklearn / numpy (tj. Głębokie uczenie), możesz owinąć obiekt PIL przy pomocy np.array (). Może to uratować Cię przed koniecznością korzystania z Google, tak jak ja:
źródło
Python 3
Jupyter Notebook i IPython
W przeciwieństwie do innych metod, ta metoda działa również w pętli for!
źródło
Prawdopodobnie obecnie zalecanym sposobem wprowadzania / wysyłania obrazów jest użycie dedykowanego pakietu ImageIO . Dane obrazu można odczytać bezpośrednio z adresu URL za pomocą jednego prostego wiersza kodu:
Wiele odpowiedzi na tej stronie poprzedza wydanie tego pakietu i dlatego nie wspominają o nim. ImageIO zaczynał jako składnik zestawu narzędzi Scikit-Image . Obsługuje wiele formatów naukowych oprócz tych udostępnianych przez popularną bibliotekę przetwarzania obrazu PILlow . Zawija to wszystko w czysty interfejs API skoncentrowany wyłącznie na wejściach / wyjściach obrazu. W rzeczywistości SciPy usunął własny program do odczytu / zapisu obrazów na rzecz ImageIO .
źródło
wybierz obraz w chromie, kliknij go prawym przyciskiem myszy, kliknij
Copy image address
, wklej dostr
zmiennej (my_url
), aby odczytać obraz:Otwórz to;
źródło