使用url中gif的第一帧以与png相同的方式进行图像处理?

问题描述

我正在尝试从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))