当响应如下所示时,如何从 URL 请求创建/获取/打开图像:
\x00\x00\x00 ftypavif\x00\x00\x00\ ... \x87"y~\x13 $%\\\xad ... xb5\xa07tR\x80
当然更长。
此类 URL 的示例是 here(不是我的网站)。
通常我会这样做:
import requests
import urllib, cStringIO, PIL, io
from PIL import Image
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
headers = {'User-agent': ua, 'Accept-Encoding':'gzip,deflate,sdch', 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'}
# below url returns regular image and code works
imgurl = "https://media-cldnry.s-nbcnews.com/image/upload/t_focal-860x484,f_auto,q_auto:best/MSNBC/Components/Video/201610/tdy_food_brisket_161021__142565.jpg"
# below url does NOT work.
imgurl = "https://media-cldnry.s-nbcnews.com/image/upload/t_focal-860x484,f_avif,q_auto:eco,dpr_2/MSNBC/Components/Video/201610/tdy_food_brisket_161021__142565.jpg"
r = requests.get(imgurl, headers=None, verify=False,timeout=3)
image = Image.open(cStringIO.StringIO(r.content))
错误 URL 的错误是“IOError:无法识别图像文件...”
我也尝试过
image = Image.open(io.BytesIO(r.content))
以及各种版本的
data = bytes.fromhex(r.content)
import binascii
data = binascii.a2b_hex(r.content)
它们都会返回各种错误。
请注意,我仍在使用带有 PIL (Pillow) 的 Python 2.7。
\x00\x00\x00 ftypavif…
# below url does NOT work. imgurl = "https://media-cldnry.s-nbcnews.com/image/upload/t_focal-860x484,f_avif,…
这些提示图像是 AVIF 格式,此版本的 PIL 不支持该格式。