Opening an Image from a URL

I’ve determined that I’d be a much happier Nick if I had this image on my local machine. However, for the sake of this tutorial, I’m stubbornly refusing to get it via any means besides Python.

This is easy enough.

First, we’ll reach out to the hosting site with requests

import requests

url = 'https://i.redd.it/kvzncux8fre11.jpg'

conn = requests.get(url)
conn
<Response [200]>

However, when we print the first few characters of this enormous string, we’ve got the leading b character informing us that this is a byte string.

print(len(conn.content))
82094
conn.content[:100]
b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xe2\x024ICC_PROFILE\x00\x01\x01\x00\x00\x02$appl\x04\x00\x00\x00mntrRGB XYZ \x07\xe1\x00\x07\x00\x07\x00\r\x00\x16\x00 acspAPPL\x00\x00\x00\x00APPL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

For this, we’ll leverage the standard library BytesIO object, which creates a stream of byte-like data that we can feed to the final step…

from io import BytesIO

BytesIO(conn.content)
<_io.BytesIO at 0x1dac1e179e8>

Good old PIL

from PIL import Image
Image.open(BytesIO(conn.content))

png

The day is saved.