2017-02-25 3 views
2

私はhereから取得したPythonアプリケーションを持っていますが、私のニーズに合わせて変更しましたが、スクリプト内のアイコンについては、パフォーマンスの問題があるかもしれないが、現時点では問題ではないことを認識しています。すべてのファイルを1つにしておくだけで、友人やコンピュータ間で簡単に変更できます。 私の質問は、埋め込まれたアイコンイメージ(pngファイル、どのタイプでも可能)をこのコード行に使用すると、ファイル自体の代わりにファイルへのパスを取得できますか?wx.iconfrombitmap(wx.bitmap(path))で使用する画像を埋め込む方法python

def set_icon(self, path): 
    icon = wx.IconFromBitmap(wx.Bitmap(path)) 
    self.SetIcon(icon, TRAY_TOOLTIP) 

私はimg2py、base64で何もしませんでしたので、ファイルではなく必要なパスだと思っていました。 パスの代わりに埋め込みファイルを使用するようにスクリプト(またはwxライブラリ)を変更または変更するにはどうすればよいですか?

答えて

2

私は通常、これを実現する方法は、base64とzlibの

を組み合わせることであるトリプル引用符を使用して、必要に応じて改行を挿入するスクリプトに

from zlib import compress 
    from base64 import b64encode 
    with open("image.png", "rb") as fileobj: 
     data = b64encode(compress(fileobj.read())) 

コピー「データ」によって埋め込まれた画像データを生成します。

data = """Tm90IGFjdHVhbCBwaWN0dXJlIGRhdGE="""

あなたは、画像データを再作成する必要がある場合は、単にエンコーディングおよび圧縮

from base64 import b64decode 
from zlib import decompress 
image_data = decompress(b64decode(data)) 

を逆にあなたがビットマップオブジェクトは、wxPythonののバージョンに依存し再作成方法。フェニックスを使用すると、私はいくつかの埋め込みファイルに

を用いた場合であっても、パフォーマンスへの影響を気づいていないあなたは、ストリームからwx.Imageを作成して呼び出してから、私の用途で

from io import BytesIO 
stream = BytesIO(bytearray(image_data)) # just bytes() for py3 
image = wx.Image(stream, wx.BITMAP_TYPE_ANY) # wx.ImageFromStream for legacy wx 
bitmap = wx.Bitmap(image) # wx.BitmapFromImage for legacy wx 

画像からwx.Bitmapでき構築します

+1

イメージファイルを 'PyEmbeddedImage'オブジェクトとしてエンコードするのに役立つwxPythonには、' wx.Image'、 'wx.Bitmap'などに変換するためのメソッドが含まれています。 python -m wx.tools.img2py --help' – RobinDunn

関連する問題