Я пытаюсь определить цвета используемой цветовой палитры изображения с помощью PIL / подушки. Я пробовал следующее:
image[x,y]
: это даст мне только индексный номер соответствующего пикселя (то есть 1
) image.getpixel((x,y))
: снова, это даст мне только номер индекса соответствующего пикселя (т.е. 1
) image.getcolors()
: Это даст мне количество пикселей и их соответствующий номер индекса (то есть [(2, 1), (2, 0)]
) image.palette
: возвращает «объект PIL.ImagePalette.ImagePalette» image.getpalette()
: возвращает большой массив (на мой взгляд) не связанных целых чисел (т. Е. [0, 0, 255, 255, 0, 0, 2, 2, 2, 3, 3 ,3 ...]
)
Как абсолютный запасной вариант, я мог бы преобразовать режим изображения и затем получить значения цвета, но я бы предпочел, если это невозможно.
С этим примером изображения (2x2 пикселя изображение, индексированный режим с 2 цветами, созданными с помощью GIMP, два верхних пикселя - красные (255,0,0), два нижних - синие (0,0,255)), я ожидал что-то вроде:
image.getpalette()
1: (255,0,0)
0: (0,0,255)
Редактировать: Ближайшее, что у меня есть:
image.palette.getdata()
: Это дает мне ('RGB;L', b'\x00\x00\xff\xff\x00\x00')
. Есть ли способ связать это с индексом. Здесь я думаю, что каждые три байта будут соответствовать одному порядковому номеру.