OS X Mavericks で ImageTk.PhotoImage を使用している Tkinter アプリで、PNG 画像が表示されないことに気付きました。ただし、GIF と JPEG は正常に表示されます。エラーが出力されたり例外がスローされたりすることはなく、コードをデバッグすると、画像が読み取られ、高さと幅が正しいことが示されます。簡単な例を次に示します。
import Tkinter
from PIL import Image, ImageTk
logo_file = 'test.png'
#logo_file = 'test.gif'
class Application(Tkinter.Frame):
def __init__(self, master):
Tkinter.Frame.__init__(self, master)
self.master.minsize(width=512, height=256)
self.master.config()
self.pack()
self.main_frame = Tkinter.Frame()
self.some_image = ImageTk.PhotoImage(Image.open(logo_file))
some_label = Tkinter.Label(self.main_frame, image=self.some_image)
some_label.config()
some_label.pack(side='top')
self.main_frame.place(in_=self.master, anchor='c', relx=.5, rely=.5)
root = Tkinter.Tk()
app = Application(root)
app.mainloop()
GIF を使用すると画像は表示されますが、PNG を使用すると表示されません。繰り返しますが、これは OS X Mavericks でのみ発生し、Mountain Lion は正常に動作します。再インストール(PILのコンパイル)を試してみましたが、うまくいきませんでした。また、新しいvirtualenvを試しました。
PNGを作成/保存するときに正しく設定する必要があるPNG属性はおそらくありますか?それとも、これは PIL、Tkinter、または OS X のバグですか?
いくつかの詳細を追加する更新
私は使用しています:
- Python 2.7.5 (/usr/bin/python)
- PIL 1.1.7 (pip を使用してコンパイル)
これは、Mountain Lion から Mavericks に更新されたばかりで、以前に PIL がインストールされていたマシン上にあり、Apple が出荷したシステム Python をいじっていません。
Update 2 ピロー設定まとめ
Pillow 2.2.1 をインストールしたところ、PNG をサポートしていると表示されました。
--------------------------------------------------------------------
PIL SETUP SUMMARY
--------------------------------------------------------------------
version Pillow 2.2.1
platform darwin 2.7.5 (default, Aug 25 2013, 00:04:04)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)]
--------------------------------------------------------------------
--- TKINTER support available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- TIFF G3/G4 (experimental) support available
--- FREETYPE2 support available
*** LITTLECMS support not available
*** WEBP support not available
*** WEBPMUX support not available
--------------------------------------------------------------------
また、brew(libpng 1.5.14)を使用してlibpngをアンインストールして再インストールしました。次に、zlib を使用していると思われますが、Pillow を再インストールしてビルドを確認しました。
Update 3 で Python 2.7.5 をビルドしようとしている
おそらく問題は zlib にあり、Python 2.7.5 をコンパイルしようとすると、次のようになります。
Python build finished, but the necessary bits to build these modules were not found:
_bsddb _sqlite3 _ssl
bsddb185 dbm dl
gdbm imageop linuxaudiodev
nis ossaudiodev readline
spwd sunaudiodev zlib
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
Failed to build these modules:
_tkinter