Was ich versuche, ist ziemlich einfach, wenn es sich um eine lokale Datei handelt, aber das Problem tritt auf, wenn ich versuche, dies mit einer Remote-URL zu tun.
Grundsätzlich versuche ich, ein PIL-Bildobjekt aus einer Datei zu erstellen, die von einer URL abgerufen wird. Sicher, ich könnte die URL immer einfach abrufen und in einer temporären Datei speichern und dann in einem Bildobjekt öffnen, aber das fühlt sich sehr ineffizient an.
Folgendes habe ich:
Image.open(urlopen(url))
Es seek()
fällt aus, sich zu beschweren, dass es nicht verfügbar ist, also habe ich Folgendes versucht:
Image.open(urlopen(url).read())
Aber das hat auch nicht funktioniert. Gibt es einen besseren Weg, dies zu tun, oder ist das Schreiben in eine temporäre Datei der akzeptierte Weg, um so etwas zu tun?
python
python-imaging-library
Daniel Quinn
quelle
quelle
Antworten:
In Python3 sind die Module StringIO und cStringIO weg.
In Python3 sollten Sie Folgendes verwenden:
quelle
requests
Das Paket gibt beim Abrufen eines Bildes von einer URL den Statuscode 503 aus. Stattdessen musste ich zurückgreifenhttp.client
, um das Bild zu erhalten.Image.open(response.raw)
. PIL prüft dies jetzt automatisch und wickelt das BytesIO unter die Haube. Von: pillow.readthedocs.io/en/3.0.x/releasenotes/2.8.0.htmlSie könnten versuchen, ein StringIO zu verwenden
quelle
Ich benutze die Anforderungsbibliothek. Es scheint robuster zu sein.
quelle
pip3.4 install pillow
.Für diejenigen unter Ihnen, die Pillow verwenden, können Sie ab Version 2.8.0:
oder wenn Sie verwenden
requests
:Verweise:
quelle
Verwenden Sie
StringIO
diese Option , um die gelesene Zeichenfolge in ein dateiähnliches Objekt umzuwandeln:quelle
Für diejenigen, die eine sklearn / numpy-Nachbearbeitung durchführen (dh Deep Learning), können Sie das PIL-Objekt mit np.array () umschließen. Dies könnte Sie davon abhalten, Google wie ich zu müssen:
quelle
Python 3
Jupyter Notebook und IPython
Im Gegensatz zu anderen Methoden funktioniert diese Methode auch in einer for-Schleife!
quelle
Die wohl empfohlene Methode zur Eingabe / Ausgabe von Bildern ist heutzutage die Verwendung des dedizierten Pakets ImageIO . Bilddaten können mit einer einfachen Codezeile direkt von einer URL gelesen werden:
Viele Antworten auf dieser Seite stammen aus der Zeit vor der Veröffentlichung dieses Pakets und werden daher nicht erwähnt. ImageIO wurde als Bestandteil des Scikit-Image- Toolkits gestartet . Es unterstützt eine Reihe wissenschaftlicher Formate zusätzlich zu denen der beliebten Bildverarbeitungsbibliothek PILlow . Es verpackt alles in eine saubere API, die sich ausschließlich auf die Bildeingabe / -ausgabe konzentriert. In der Tat, SciPy entfernt sein eigenes Bild - Leser / Schreiber für ImageIO .
quelle
Wählen Sie das Bild in Chrom aus, klicken Sie mit der rechten Maustaste darauf, klicken Sie auf
Copy image address
und fügen Sie es in einestr
Variable (my_url
) ein, um das Bild zu lesen:öffne es;
quelle