简体   繁体   中英

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

I am currently working on a discord bot with Pycord. I am working on adding support for GIF images on the currently existing image commands, and I need the color of the pixels. When I try to get the color of an exact point in PIL/Pillow, I get a number representing the color of the pixel in the GIF color table, which is not what I want. Even when I convert the image to RGBA, I still get only the index, nothing else. When I google it, all I see is multitudes of this same method that I tried.

Here is a basic program to demonstrate what I have tried:

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
        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)

If anyone can help, that would be very appreciated!

Try

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

I tested this and it works for me. Based on [this post]. ( Get pixel's RGB using PIL )

Edit: another approach that has worked for me in the past is to use pixels = img.load() and index a pixel like pixels[x, y]

This worked for me

    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) 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM