wxPythonとPILを使って縮小した画像を綺麗に表示

最初にwxImage(wxPythonのwx.Image)を使って画像を縮小したんだが、どうも画質が悪い(ギザギザ)。
アンチエイリアス機能がなく、ぼかしを入れても所詮は気休め。

PILならアンチエイリアスを指定できるので、PILで画像を縮小させてからwx.image.ConvertToBitmap()に画像データを渡せばいいんじゃないの。
というわけで。

# PILで画像を読み込む
image_pil = Image.open(image_path)
image_pil.thumbnail((640,480), Image.ANTIALIAS)

# wxPythonに縮小した画像を渡す
image_wx = wx.EmptyImage(image_pil.size[0],image_pil.size[1])
image_wx.SetData(image_pil.convert('RGB').tostring())
wx.StaticBitmap(root, -1, image_wx.ConvertToBitmap(), (0,0), (640,480))

PILのthumbnailは比率を維持したまま変換できるので大変楽です。Image.ANTIALIASが肝心のアンチエイリアス指定。
wxPythonに縮小後の画像データを渡したら、あとはwx.StaticBitmapでrootフレームに表示します。

違いがはっきり分かるくらい、アンチエイリアスの有無で随分変わる。