python 打包为exe文件后,图片资源路径变化后可能会出现无法打开的情况。
可以使用Python的base64模块来将图片转换为64编码的字符串
以下为一个基于python tkinter 的例子:
1.将图片转码
更改图片路径输出相应编码
import base64
def image_change():
with open("D:\\Users\\桌面\\图片\\蓝天.png", 'rb') as image_file:
my_str = base64.b64encode(image_file.read()).decode('utf-8')
return my_str
# image_path=后为图片路径,运行后打印编码
base64_str = image_change()
print(base64_str)
运行后输出一段编码
2.在tkinter 中输出
要在Tkinter中显示base64编码的图片,你可以使用`PhotoImage`类,`io`是Python标准库中的一个模块,它提供了用于处理输入和输出的工具和函数。在这个特定的上下文中,`io.BytesIO`类是用来处理字节数据的内存缓冲区。 在上述代码中,我们使用`io.BytesIO`类将从base64编码字符串解码后得到的字节数据存储在内存中,然后将其传递给`Image.open()`方法,以便打开并读取图像数据。
import io
import base64
import tkinter as tk
from PIL import ImageTk, Image
def image_back():
image_bytes = base64.b64decode("R0lGODlhH……太长了,省略") # 用你自己的base64字符串替换这里
image_data = io.BytesIO(image_bytes)
my_image = Image.open(image_data)
return my_image
image = image_back()
# 也可以 my_str = "R0lGODlhH……太长了,省略"
# image = image_back(my_str) ,给函数值即可
root = tk.Tk() # 创建窗口
# 将图片转换为PhotoImage对象
my_photo = ImageTk.PhotoImage(image)
label = tk.Label(root, image=my_photo)
label.pack()
root.mainloop()
运行效果