如何嵌入图像以与wx.iconfrombitmap(wx.bitmap(path))python一起使用

时间:2017-02-25 13:31:35

标签: python wxpython embed

我有一个python应用程序,我从here获得并根据我的需要进行了修改,但是我想把我用于图标的图像放在脚本中,我知道可能存在性能问题,但它是目前不是问题,我只需要将所有文件保留在一个文件中,这样我就可以轻松地与朋友和计算机进行更改。 所以我的问题是,如何使用嵌入式图标图像(png文件,可以是任何类型),使用这行代码获取文件的路径,代替文件本身?

webpack.config.js

我尝试使用img2py,base64,没有任何效果,所以我认为它可能不是文件所需的路径。 如何更改/修改脚本(或wx lib)以使其与嵌入文件而不是路径一起使用?

1 个答案:

答案 0 :(得分:3)

我通常的方法是组合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版本。使用phoenix构建,你可以调用从流创建一个wx.Image,然后从图像创建一个wx.Bitmap

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

在我的使用中,即使使用多个嵌入式文件,我也没有注意到性能影响