3 回答
TA贡献1856条经验 获得超11个赞
是的,这样:
im = Image.open('image.gif')
rgb_im = im.convert('RGB')
r, g, b = rgb_im.getpixel((1, 1))
print(r, g, b)
(65, 100, 137)
之所以之前获得单个值,pix[1, 1]是因为GIF像素引用了GIF调色板中的256个值之一。
另请参见此 SO帖子:GIF和JPEG的Python和PIL像素值不同,并且此PIL参考页面 包含有关该convert()函数的更多信息。
顺便说一句,您的代码将对.jpg图像正常工作。
TA贡献1895条经验 获得超3个赞
GIF将颜色存储为调色板中x种可能颜色中的一种。阅读有关gif受限调色板的信息。因此,PIL为您提供调色板索引,而不是该调色板颜色的颜色信息。
编辑:删除了具有错字的博客帖子解决方案的链接。其他答案也做同样的事情而没有错字。
TA贡献1796条经验 获得超4个赞
转换图像的另一种方法是从调色板创建RGB索引。
from PIL import Image
def chunk(seq, size, groupByList=True):
"""Returns list of lists/tuples broken up by size input"""
func = tuple
if groupByList:
func = list
return [func(seq[i:i + size]) for i in range(0, len(seq), size)]
def getPaletteInRgb(img):
"""
Returns list of RGB tuples found in the image palette
:type img: Image.Image
:rtype: list[tuple]
"""
assert img.mode == 'P', "image should be palette mode"
pal = img.getpalette()
colors = chunk(pal, 3, False)
return colors
# Usage
im = Image.open("image.gif")
pal = getPalletteInRgb(im)
添加回答
举报