python程序所需的图片通过base64编码成字符串放在代码中

问题背景

python代码打包成exe可执行文件。问题是这个python程序执行时需要显示一张图片,这就意味着打包成exe后,也需要在exe同目录下存放这张图片,你的exe才能正常执行。而且不方便的是,我们把这款exe分享给别人用的时候,除了发这个exe之外,还需要发这张图片,这…有点鸡肋。想要直接一个exe发过去就能用。
问题背景来自我的另外一篇关于tkinter的博文中显示welcome图片

解决方案

使用base64把图片编码转换为一个字符串,把字符串放在代码里,要用的时候将字符串转换为图片显示出来。

  • 什么是Base64编码?
  • Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。**
  • 步骤1:编码
    这段代码用来生成对图片的base64编码

with open("D:\\welcome.png","rb") as f:
	# 读取图片,并通过base64编码
    base64_data = base64.b64encode(f.read())
    # 将编码存在txt文件中
    file=open('base64img.txt','wt')
    file.write(str(base64_data))
    file.close()
  • 步骤2:复制编码写进我们要显示这张图片的程序里
    本来是从本地读取,原来的代码是这样子的,这样子需要在本地存放图片
# 欢迎的图片显示
canvas = tk.Canvas(window, height=300, width=450)
image_file = tk.PhotoImage(file='welcome.png')
image = canvas.create_image(0, 0, anchor='nw', image=image_file)
canvas.pack(side='top')

将刚才生成并存放在base64img.txt的编码复制出来,作为字符串赋值给一个变量img_str,通过base64解码为图片,写在本地。这样即使你的本地没有这张图片,每次运行程序也会自动在本地生成这张图片,然后调用。修改后代码如下:

img_str = "这里编码太长了,我没写进来"
img_data = base64.b64decode(img_str)
with open('welcome.png', 'wb') as f:
      f.write(img_data)
# 欢迎的图片显示
canvas = tk.Canvas(window, height=300, width=450)
image_file = tk.PhotoImage(file='welcome.png')
image = canvas.create_image(0, 0, anchor='nw', image=image_file)
canvas.pack(side='top')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值