316 votes

Comment puis-je lire les données d'image à partir d'une URL en Python?

Ce que j'essaie de faire est assez simple, quand nous avons affaire à un fichier local, mais le problème c'est quand j'essaie de le faire avec une URL distante.

En gros, je suis en train de créer un PIL objet image à partir d'un fichier tiré à partir d'une URL. Bien sûr, je pouvais toujours chercher l'URL et de le stocker dans un fichier temporaire, puis de l'ouvrir dans un objet image, mais qui se sent très inefficace.

Voici ce que j'ai:

Image.open(urlopen(url))

Elle flocons de sortir en se plaignant qu' seek() n'est pas disponible, alors j'ai essayé ceci:

Image.open(urlopen(url).read())

Mais cela ne fonctionne pas non plus. Est-il une Meilleure Façon de le faire, ou est écrit dans un fichier temporaire, le moyen accepté de faire ce genre de chose?

454voto

Andres Kull Points 51

En Python3 le StringIO et cStringIO modules sont partis.

En Python3 vous devez utiliser:

from PIL import Image
import requests
from io import BytesIO

response = requests.get(url)
img = Image.open(BytesIO(response.content))

173voto

Fábio Diniz Points 4110

vous pouvez essayer d'utiliser un StringIO

import urllib, cStringIO

file = cStringIO.StringIO(urllib.urlopen(URL).read())
img = Image.open(file)

63voto

Saurav Points 1041

J'ai utiliser la demande de la bibliothèque. Il semble être plus robuste.

from PIL import Image
import requests
from StringIO import StringIO

response = requests.get(url)
img = Image.open(StringIO(response.content))

31voto

Dan D. Points 17448

utiliser StringIO à son tour le lire une chaîne dans un fichier, comme objet:

from StringIO import StringIO

Image.open(StringIO(urlopen(url).read()))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X