Lo que intento hacer es bastante simple cuando tratamos con un archivo local, pero el problema surge cuando trato de hacer esto con una URL remota.
Básicamente, estoy tratando de crear un objeto de imagen PIL a partir de un archivo extraído de una URL. Claro, siempre podría buscar la URL y almacenarla en un archivo temporal, luego abrirla en un objeto de imagen, pero eso se siente muy ineficiente.
Esto es lo que tengo:
Image.open(urlopen(url))
Se queja de que seek()
no está disponible, así que probé esto:
Image.open(urlopen(url).read())
Pero eso tampoco funcionó. ¿Hay una mejor manera de hacer esto, o escribir en un archivo temporal es la forma aceptada de hacer este tipo de cosas?
python
python-imaging-library
Daniel Quinn
fuente
fuente
Respuestas:
En Python3, los módulos StringIO y cStringIO se han ido.
En Python3 deberías usar:
fuente
requests
el paquete arroja el código de estado 503 mientras recupera una imagen de una URL. En cambio, tuve que recurrir ahttp.client
para obtener la imagen.Image.open(response.raw)
. PIL comprueba automáticamente eso ahora y hace el BytesIO envolviendo debajo del capó. De: pillow.readthedocs.io/en/3.0.x/releasenotes/2.8.0.htmlpodrías intentar usar un StringIO
fuente
Yo uso la biblioteca de solicitudes. Parece ser más robusto.
fuente
pip3.4 install pillow
.Para aquellos de ustedes que usan Pillow, desde la versión 2.8.0 pueden:
o si usas
requests
:Referencias
fuente
Use
StringIO
para convertir la cadena de lectura en un objeto similar a un archivo:fuente
Para aquellos que realizan un procesamiento posterior de sklearn / numpy (es decir, aprendizaje profundo), puede envolver el objeto PIL con np.array (). Esto podría evitar que tenga que buscarlo en Google como lo hice yo:
fuente
Python 3
Jupyter Notebook e IPython
¡A diferencia de otros métodos, este método también funciona en un bucle for!
fuente
La forma recomendada de hacer entrada / salida de imágenes en estos días es usar el paquete dedicado ImageIO . Los datos de imagen se pueden leer directamente desde una URL con una línea de código simple:
Muchas respuestas en esta página son anteriores al lanzamiento de ese paquete y, por lo tanto, no lo mencionan. ImageIO comenzó como componente del kit de herramientas Scikit-Image . Es compatible con varios formatos científicos además de los proporcionados por la popular biblioteca de procesamiento de imágenes PILlow . Lo envuelve todo en una API limpia centrada únicamente en la entrada / salida de imágenes. De hecho, SciPy eliminó su propio lector / escritor de imágenes a favor de ImageIO .
fuente
seleccione la imagen en cromo, haga clic derecho sobre ella, haga clic en
Copy image address
, péguela en unastr
variable (my_url
) para leer la imagen:abrelo;
fuente