mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-25 00:34:14 +03:00
Add support for HTTP response objects to Image.open()
HTTP response objects returned from `urllib2.urlopen(url)` or `requests.get(url, stream=True).raw` are 'file-like' but do not support `.seek()` operations. As a result PIL is unable to open them as images, requiring a wrap in `cStringIO` or `BytesIO`. This commit adds this functionality to `Image.open()` by way of an `.seek(0)` check and catch on exception `AttributeError` or `io.UnsupportedOperation`. If this is caught we attempt to wrap the object using `io.BytesIO` (which will only work on buffer-file-like objects). This allows opening of files using both `urllib2` and `requests`, e.g. Image.open(urllib2.urlopen(url)) Image.open(requests.get(url, stream=True).raw)
This commit is contained in:
parent
15727e2685
commit
735d342608
|
@ -109,6 +109,7 @@ from PIL._util import deferred_error
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import io
|
||||||
|
|
||||||
# type stuff
|
# type stuff
|
||||||
import collections
|
import collections
|
||||||
|
@ -2248,6 +2249,11 @@ def open(fp, mode="r"):
|
||||||
else:
|
else:
|
||||||
filename = ""
|
filename = ""
|
||||||
|
|
||||||
|
try:
|
||||||
|
fp.seek(0)
|
||||||
|
except (AttributeError, io.UnsupportedOperation):
|
||||||
|
fp = io.BytesIO(fp.read())
|
||||||
|
|
||||||
prefix = fp.read(16)
|
prefix = fp.read(16)
|
||||||
|
|
||||||
preinit()
|
preinit()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user