You can skip saving to the temporary part of the file and use the corresponding response object directly to create the image:
import urllib.request
from PIL import Image
im = Image.open(urllib.request.urlopen(url))
print(im.format, im.mode, im.size)
Here is requestsanalog:
import requests
from PIL import Image
r = requests.get(url, stream=True)
r.raw.decode_content = True
im = Image.open(r.raw)
print(im.format, im.mode, im.size)
Pillow 2.9.0 requests 2.7.0. Pillow 2.8.