"L;16"
のモードが必要です。しかし、PILは、PGMをロードするときにFile.cにハードコードされた"L"
のモードを持っているようです。 16ビットPGMを読み込めるようにするには、write your own decoderが必要です。
ただし、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)]
を参照してください、それだけで正確に正しいされていない、0xFE
として0xCAFE
値を解釈します。
どうやら些細なPythonプログラムを書こうとすると、スタックオーバーフローによって常に奇妙な結果になるようです。 – nobar
Pythonについて私を夢中にさせるものの1つは、上の 'dst = src'のような浅いコピーです。時には、私は、PythonがC++プログラマーにとって理解しにくいと思うこともあります。 – nobar
...私は、最も有益な投票回答(ここではhttp://stackoverflow.com/questions/9541025/how-to-copy-a-python-class)を見つけました。特に、上記の問題を 'dst = src()'を実行することで解決できるように見えます。 – nobar