web-dev-qa-db-ja.com

空のEXTENSION配列が原因で、PILの保存機能で「不明な拡張子」

私はpython=の初心者で、PILのPillow forkのsave関数に問題があります。

この最小限の例で

_import Image

im = Image.new("RGB", (200, 30), "#ddd")
im.save("image.png")
_

次のエラーが発生します。

_File "/usr/lib64/python2.7/site-packages/PIL/Image.py", line 1667, in save
  raise KeyError(ext)  # unknown extension
KeyError: '.png'
_

save関数の対応する行は次のとおりです。

_preinit()

[...]

try:
  format = EXTENSION[ext]
except KeyError:
  raise KeyError(ext)  # unknown extension
_

EXTENSION配列を調べたところ、空であることがわかりましたが、_preinit()では、たとえば_from PIL import PngImagePlugin_によって初期化する必要があります。 _PngImagePlugin.py_はImage.register_extension("PNG", ".png")を呼び出します。この関数内またはPngImagePlugin内の配列を監視すると、ファイル拡張子が実際に含まれます。

ただし、try-except-blockの直前にprint(EXTENSION)を置くと、空のEXTENSION配列が表示されます。

SAVE配列と同じ問題がsave関数の数行下にあります。)

どんな助けでもありがたいです。

編集:OpenSuse 13.1から最近アップグレードしました。 13.2に13.1ではうまくいきましたが、13.2ではうまくいきませんでした。

18
DAH

代わりにこれを書く必要があります:

from PIL import Image # Notice the 'from PIL' at the start of the line

im = Image.new("RGB", (200, 30), "#ddd")
im.save("image.png")
13
jzs