O que estou tentando fazer é bastante simples quando estamos lidando com um arquivo local, mas o problema surge quando tento fazer isso com um URL remoto.
Basicamente, estou tentando criar um objeto de imagem PIL a partir de um arquivo extraído de uma URL. Claro, eu sempre poderia buscar o URL e armazená-lo em um arquivo temporário, depois abri-lo em um objeto de imagem, mas isso parece muito ineficiente.
Aqui está o que eu tenho:
Image.open(urlopen(url))
Ele sai reclamando que seek()
não está disponível, então tentei o seguinte:
Image.open(urlopen(url).read())
Mas isso também não funcionou. Existe uma maneira melhor de fazer isso ou está gravando em um arquivo temporário a maneira aceita de fazer esse tipo de coisa?
python
python-imaging-library
Daniel Quinn
fonte
fonte
Respostas:
No Python3, os módulos StringIO e cStringIO se foram.
No Python3 você deve usar:
fonte
requests
O pacote lança o código de status 503 ao buscar uma imagem de um URL. Em vez disso, tive que recorrerhttp.client
para obter a imagem.Image.open(response.raw)
. O PIL verifica automaticamente isso agora e faz o BytesIO embaixo do capô. De: pillow.readthedocs.io/en/3.0.x/releasenotes/2.8.0.htmlvocê pode tentar usar um StringIO
fonte
Eu uso a biblioteca de solicitações. Parece ser mais robusto.
fonte
pip3.4 install pillow
.Para aqueles que usam o Pillow, da versão 2.8.0, você pode:
ou se você usar
requests
:Referências:
fonte
Use
StringIO
para transformar a sequência de leitura em um objeto parecido com um arquivo:fonte
Para aqueles que fazem algum pós-processamento sklearn / numpy (por exemplo, Deep Learning), você pode agrupar o objeto PIL com np.array (). Isso pode evitar que você precise acessar o Google como eu fiz:
fonte
Python 3
Notebook Jupyter e IPython
Ao contrário de outros métodos, esse método também funciona em um loop for!
fonte
A maneira sem dúvida recomendada para entrada / saída de imagem atualmente é usar o pacote dedicado ImageIO . Os dados da imagem podem ser lidos diretamente de um URL com uma simples linha de código:
Muitas respostas nesta página são anteriores ao lançamento desse pacote e, portanto, não o mencionam. O ImageIO começou como um componente do kit de ferramentas Scikit-Image . Ele suporta vários formatos científicos, além dos fornecidos pela popular biblioteca de processamento de imagens PILlow . Ele agrupa tudo em uma API limpa, focada apenas na entrada / saída de imagem. De fato, o SciPy removeu seu próprio leitor / gravador de imagens em favor do ImageIO .
fonte
selecione a imagem no chrome, clique com o botão direito do mouse
Copy image address
, cole-o em umastr
variável (my_url
) para ler a imagem:abra;
fonte