我在学习Python到GUI的使用时,尝试在一个组件上使用了背景图片,然而,直接Run时这个背景图片是可以显示出来,可当使用pyinstaller打包成exe时却没有打包进去显示出来,在网上搜索多个方法测试后终于找到一个成功的方法。思路如下:
将图片编码成字节码,然后直接引用字节码再解码成图片显示出来。
1. 传入需要编码的图片路径img_path,通过b64encode()方法编码成字节码。注意,当图片太大时,通过print()输出的信息可能是不完整的,直接复制这个信息会导致图片解码不出来,所以最好把字节码保存到一个文件,后续需要使用图片时就可以把文件里面的字节码复制到代码中来直接引用。
2. 有了图片的字节码,我们就可以通过b64decode()解码出来将图片保存到本地,然后GUI组件引用这个路径下的图片就可以显示了。注意,要先把图片解码出来到本地,组件才能显示哦,顺序不要搞错了。
import base64
def encode_image(img_path: str):
# 获取图片的字节码
with open(img_path, 'rb') as img:
# img_data数据可能混杂其他符号或者不完整,调用时需要检查下
img_data = base64.b64encode(img.read())
print(img_data)
# 图片太大时,print打印出来的信息会不完整,再写到文件中保存方便后续解码使用
with open('D://image_data.txt', 'wb') as f:
f.write(img_data)
def decode_image(img_str: str):
# 图片字节码有格式要求,img_str模板:"/9j/4AAQSkZJR+kRXhpZgA=="
# 把图片解码到本地,需要引用图片的组件直接调用就可以显示了
with open('D://default_bg.jpg', 'wb') as img:
img.write(base64.b64decode(img_str))