我正在研究一个非常基本的PNG图像,但是当我尝试加载它时,它会将所有像素都设为(0)。图片链接:https://i.imgur.com/Oook1VX.png
from PIL import Image
myImage = Image.open("Oook1VX.png")
print(myImage.getpixel((0,0)))
print(myImage.getcolors())
输出:
0
[(2073600, 0)]
我希望它能够看到绿色?它适用于其他图像,但不适用于此图像。如果有人有任何想法我会非常感激。
答案 0 :(得分:2)
getcolors()
返回将颜色映射到数字的元组列表(用于压缩目的)。
在您的示例中,该元组列表表示颜色2073600
在图像中被编码为0
。因此,如果getpixel()
返回0
,则表示2073600
。
2073600
以十六进制为#1fa400,这是图片中的绿色。
您可能会受益于这样一个自动解析颜色的包装器:
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)