/ Python

在python文件中集成图片

许久不写博文了,为了让大家知道我还活着,偶尔更新一下下吧。

进入正题,这两天在写一个可视化的python小项目,一个py文件就能搞定。

但是我想给这个程序挂个图标,正常使用的方法是从外部文件拉取图片来显示。

可是我的脚本总共才一个文件,再拖一个图片文件未免太麻烦了,所以我决定把图片集成在py文件中。

在网络上搜索了下,发现有人做过这方面的东西。

http://lihf198628.blog.163.com/blog/static/1138145200923010157345/

这里面的方法二正是我想实现的效果,可是文章中没有说明如何将图片转为文章中的编码,这下就有点蛋疼了。

蛋疼过后,我认真看了下文章中的编码特征,猜测是图片的二进制格式,因为里面的字符串能够正常显示出来,例如PNG,而那些不可见字符则用/x这种转义的方式表示出来。

思路就有点明朗了,用二进制方式打开要集成的图片,用一种方式将这些二进制内容编码成普通字符串,将这个字符串当作程序中的一个变量。要使用的时候将字符串解码,然后使用文章中的方法就可以实现效果了。

最终我决定使用base64方式编解码。

核心代码如下:

1.将图片文件编码为base64字符串

import base64                   #导入base64库 f = open(r'/home/1.ico','rb')    #用二进制方式打开图片文件 str = base64.b64encode(f.read()) #读取文件内容,编码为base64字符串 f.close()                        #关闭文件 print str                        #输出base64编码结果

2.将base64字符串解码为图片

import base64 import wx import cStringIO def GetMondrianData(): iconData = "图片BASE64字符串" iconData = base64.b64decode(iconData) return iconData def GetMondrianBitmap(): return wx.BitmapFromImage(GetMondrianImage()) def GetMondrianImage(): stream = cStringIO.StringIO(GetMondrianData()) return wx.ImageFromStream(stream) def GetMondrianIcon(): icon = wx.EmptyIcon() icon.CopyFromBitmap(GetMondrianBitmap()) return icon

调用GetMondrianIcon()函数即可

在python文件中集成图片
Share this