问题描述
我正在尝试从URL获取gif的第一帧,并将该第一帧仅用于不同的图像处理。具体来说,就是获取像素的颜色。但是,当我尝试时,出现诸如“'GifImageFile'对象不可下标”和“'nonetype'对象不可下标”之类的错误。
我将要处理的gif图像实际上只是一帧而不是动画。由于某种原因,它们只是以这种格式而不是png / jpeg保存,并且在png / jpeg成功的地方似乎失败了。我真的只想能够像处理png / jpeg一样处理gif,我想抓住第一帧就能做到这一点。
from PIL import Image,ImageStat
from io import BytesIO
import requests
image = requests.get('link.gif',stream=True).content
image = Image.open(BytesIO(image))
image.seek(0)
color = image[1,1]
解决方法
鉴于错误NoneType' object is not subscriptable
,我们可以推断出image.seek(0)
返回了None
。我将像这样遍历每一行代码,以确保一切都按照我的期望进行:
response = requests.get('link.gif',stream=True)
response.raise_for_status() # did we retrieve the image at all?
bytesio = BytesIO(response.content)
assert bytesio.readable()
image = Image.open(bytesio)
frame = image.seek(0)
assert frame
,
我最终找到了我在此帖子中需要的信息:Getting pixel colours from animated GIF using Python PIL
我更新的代码:
from PIL import Image,ImageStat
from io import BytesIO
import requests
image = requests.get('link.gif',stream=True).content
image = Image.open(BytesIO(image))
rgb_im = image.convert('RGB')
color = rgb_im.getpixel((1,1))