Ce que j'essaie de faire est assez simple lorsque nous avons affaire à un fichier local, mais le problème survient lorsque j'essaie de le faire avec une URL distante.
Fondamentalement, j'essaie de créer un objet image PIL à partir d'un fichier extrait d'une URL. Bien sûr, je pourrais toujours simplement récupérer l'URL et la stocker dans un fichier temporaire, puis l'ouvrir dans un objet image, mais cela semble très inefficace.
Voici ce que j'ai:
Image.open(urlopen(url))
Cela s'efface de se plaindre que ce seek()
n'est pas disponible, alors j'ai essayé ceci:
Image.open(urlopen(url).read())
Mais cela n'a pas fonctionné non plus. Y a-t-il une meilleure façon de faire cela, ou est-ce que l'écriture dans un fichier temporaire est la manière acceptée de faire ce genre de chose?
python
python-imaging-library
Daniel Quinn
la source
la source
Réponses:
Dans Python3, les modules StringIO et cStringIO ont disparu.
En Python3, vous devez utiliser:
la source
requests
Le package renvoie le code d'état 503 lors de la récupération d'une image à partir d'une URL. Au lieu de cela, j'ai dû recourirhttp.client
pour obtenir l'image.Image.open(response.raw)
. PIL vérifie automatiquement cela maintenant et fait l'emballage BytesIO sous le capot. De: oreiller.readthedocs.io/en/3.0.x/releasenotes/2.8.0.htmlvous pouvez essayer d'utiliser un StringIO
la source
J'utilise la bibliothèque de requêtes. Cela semble plus robuste.
la source
pip3.4 install pillow
.Pour ceux d'entre vous qui utilisent Pillow, à partir de la version 2.8.0, vous pouvez:
ou si vous utilisez
requests
:Références:
la source
Utilisez
StringIO
pour transformer la chaîne de lecture en un objet de type fichier:la source
Pour ceux qui effectuent un post-traitement sklearn / numpy (c'est-à-dire un apprentissage profond), vous pouvez envelopper l'objet PIL avec np.array (). Cela pourrait vous éviter d'avoir à le rechercher sur Google comme je l'ai fait:
la source
Python 3
Jupyter Notebook et IPython
Contrairement aux autres méthodes, cette méthode fonctionne également dans une boucle for!
la source
La manière sans doute recommandée de faire des entrées / sorties d'images de nos jours est d'utiliser le package dédié ImageIO . Les données d'image peuvent être lues directement à partir d'une URL avec une simple ligne de code:
De nombreuses réponses sur cette page sont antérieures à la sortie de ce package et ne le mentionnent donc pas. ImageIO a commencé en tant que composant de la boîte à outils Scikit-Image . Il prend en charge un certain nombre de formats scientifiques en plus de ceux fournis par la populaire bibliothèque de traitement d' images PILlow . Il enveloppe le tout dans une API propre uniquement axée sur l'entrée / la sortie d'image. En fait, SciPy a supprimé son propre lecteur / graveur d'images en faveur d'ImageIO .
la source
sélectionnez l'image en chrome, faites un clic droit dessus, cliquez dessus
Copy image address
, collez-la dans unestr
variable (my_url
) pour lire l'image:ouvrez-le;
la source