有没有办法在PIL中获取GIF帧上像素的RGB值?

Is there a way to get an RGB value of a pixel on a frame of a GIF in PIL?

我目前正在使用 Pycord 开发一个不和谐的机器人。我正在努力在当前现有的图像命令中添加对 GIF 图像的支持,并且我需要像素的颜色。当我尝试获取 PIL/Pillow 中某个精确点的颜色时,我得到一个代表 GIF 颜色 table 中像素颜色的数字,这不是我想要的。即使我将图像转换为 RGBA,我仍然只得到索引,没有别的。当我 google 它时,我所看到的只是我尝试过的大量相同方法。

这是一个基本程序来演示我尝试过的内容:

from io import BytesIO as toimg
from PIL import Image, ImageFont, ImageDraw, ImageOps, ImageSequence
      #reqdata is gif data from a url
      imggif = Image.open(toimg(reqdata.content))
      for frame in ImageSequence.Iterator(imggif):
        img = frame.convert("RGBA")
        img = img.convert("RGBA") # might not need this due to the line above but idk
        img = ImageOps.grayscale(img) # this line was not here before, edited it in.
        width, height = img.size
        for y in range(height):
          for x in range(width):
            print(img.getpixel((x,y))) # this prints out only one number, i need an RGBA value (4 numbers)

如果有人能提供帮助,那将不胜感激!

编辑:我找到了解决方案,我意识到它不是框架本身,而是因为我在转换后对图像进行了灰度化。该程序是根据我认为的错误创建的,我什至没有检查它!这在问题中无处可寻,我很抱歉在发布这个问题之前没有考虑看这么简单的事情。在对图像进行灰度化后,我不得不转换回 RGBA。 :(

编辑 2:我刚刚意识到这将是我的最后一个问题,在浪费我在这个网站上的最后机会之前,我应该更深入地了解我犯的非常简单的错误。还好,我是个笨蛋,连这么简单的事情都不懂。我不会也不会被这个网站所需要。

尝试

r, g, b, a = img.getpixel((x, y))

我对此进行了测试,它对我有用。基于[这个post]。 (Get pixel's RGB using PIL)

编辑:过去对我有用的另一种方法是使用 pixels = img.load() 并索引像 pixels[x, y]

这样的像素

这对我有用

    from PIL import Image
    
    red_image = Image.open("red.png")
    red_image_rgb = red_image.convert("RGB")
    rgb_pixel_value = red_image_rgb.getpixel((10,15))
    print(rgb_pixel_value) #Prints (255, 0, 0)