有没有办法在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)
我目前正在使用 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)