Python PIL无法获取PNG图像的颜色(图像已附加)

Python PIL无法获取PNG图像的颜色(图像已附加),python,png,python-imaging-library,Python,Png,Python Imaging Library,我正在处理一个非常基本的PNG图像,但当我尝试加载它时,它会将所有像素设置为(0)。图像链接: 输出: 0 [(2073600, 0)] 我希望它能看到绿色?它适用于其他图像,但不适用于此图像。如果有人有任何想法,我将不胜感激。getcolors()返回将颜色映射到数字的元组列表(用于压缩目的) 在您的示例中,该元组列表表示颜色2073600在图像中编码为0。因此,如果getpixel()返回0,则表示2073600 2073600为十六进制,即图像中的绿色 您可能会受益于这样一个自动解析颜色

我正在处理一个非常基本的PNG图像,但当我尝试加载它时,它会将所有像素设置为(0)。图像链接:

输出:

0
[(2073600, 0)]
我希望它能看到绿色?它适用于其他图像,但不适用于此图像。如果有人有任何想法,我将不胜感激。

getcolors()
返回将颜色映射到数字的元组列表(用于压缩目的)

在您的示例中,该元组列表表示颜色
2073600
在图像中编码为
0
。因此,如果
getpixel()
返回
0
,则表示
2073600

2073600
为十六进制,即图像中的绿色

您可能会受益于这样一个自动解析颜色的包装器:

import struct

class PngImage:
    def __init__(self, image):
        self.image = image
        self._colors = {index: color for color, index in image.getcolors()}

    def getpixel(self, pos):
        color = self._colors[self.image.getpixel(pos)]
        return struct.unpack('3B', struct.pack('I', color))

image = PngImage(Image.open("Oook1VX.png"))
image.getpixel((0, 0)) # => (0x1f, 0x1f, 0x00)

你的回答让我有点困惑,贝利。您说2073600是我图像中的绿色,但即使颜色更改为粉红色,程序仍会输出[(2073600,0)]。(该图像有2073600像素)如果我将图像缩小,它会输出:[(49887,(0,127,14))]另外,当我精确运行代码时,它会输出:struct.error:unpack需要一个长度为3的bytes对象。请给我一些帮助?@JimmyCarlos:
getcolors
返回“…[a]未排序的(计数,像素)值列表”,因此,贝利在这方面确实是错的。但是:根据各种其他问题(您可能需要阅读文档并搜索堆栈溢出),您使用的函数不能很好地工作,或者根本不能用于索引彩色图像。如果您的图像已编制索引且绿色为0,则您的结果绝对正确。谢谢您的评论。现在有一个链接到主帖子中的图片,它是一个非常简单的1920x1080矩形,用Paint.NET制作,绝对没有添加任何内容。@JimmyCarlos:“没有添加任何内容”,我注意到了。您可以添加“1920x1080,8位调色板,非交错”,这正是我必须猜测的。
import struct

class PngImage:
    def __init__(self, image):
        self.image = image
        self._colors = {index: color for color, index in image.getcolors()}

    def getpixel(self, pos):
        color = self._colors[self.image.getpixel(pos)]
        return struct.unpack('3B', struct.pack('I', color))

image = PngImage(Image.open("Oook1VX.png"))
image.getpixel((0, 0)) # => (0x1f, 0x1f, 0x00)