Вам нужен режим "L;16"
; однако, похоже, что PIL имеет режим "L"
, жестко запрограммированный в File.c при загрузке PGM. Вам нужно написать свой собственный декодер , если вы хотите читать 16-битный PGM.
Тем не менее, поддержка 16-битных изображений все еще кажется нестабильной:
>>> im = Image.fromstring('I;16', (16, 16), '\xCA\xFE' * 256, 'raw', 'I;16')
>>> im.getcolors()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/dist-packages/PIL/Image.py", line 866, in getcolors
return self.im.getcolors(maxcolors)
ValueError: image has wrong mode
Я думаю, что PIL способен читать изображения с 16 битами, но на самом деле их хранение и манипулирование ими все еще являются экспериментальными.
>>> im = Image.fromstring('L', (16, 16), '\xCA\xFE' * 256, 'raw', 'L;16')
>>> im
<Image.Image image mode=L size=16x16 at 0x27B4440>
>>> im.getcolors()
[(256, 254)]
Видите, оно просто интерпретировало значение 0xCAFE
как 0xFE
, что не совсем правильно.