一、具体需求
最近,在用python的tkinter包做一个程序的可视化页面(GUI),但是遇到了问题就是我在GUI中导入的图片,因为换了点脑环境就打不来了,路径不一样。于是,我想着可以把这张图片以base64字节码的形式存入。
二、具体代码
import base64
import io
from PIL import Image,ImageTk
import tkinter as tk
thecode = b'R0lGODlh2AA0APcAAAgbOREcLhUlNS0vMiYbHXweHncmJnYsLlsnHz1BLFJRL2hnOwcdRgoeVgchSQckUxcpQjA5RV40QjxGR09RTXFxaWZcVJoSDYkbGpwUE5MbG5cXF5oPD6UNDawMDKoKB70EA7QKBbsFCrMMDLsKC7YHB6QSDasRDaYWCqwNEqQOErMMEqMTE6sSFKYYGrQUFbQTDY0hGrQrF4kdIpUdI6seIoclJpkmKJc4OJExMqcoKbgoKLs0Kac4OLc2NqgyLcMDA8oCAsUHCs8aD+keF/MeGss3CMgnFtkmFsg3Gtc2GNMsCuUjHOoiG+YmF+wqGMYnJsc4J9k5J8c4N9YwMOciIuc3Kc8fIbRNNp1gMNdEFtFND9hvGOVqHNJLL+RIKOdWLtBoL+pxLuNUGq08QYk9Qcs6QZdISIxK'
gif_file = base64.b64decode(thecode)
# 创建一个画布,这里非常经典,把图片转换为base64代码直接在程序中将其转化为图片导入GUI程序
canvas = tk.Canvas(window,width =2000, height = 100)
image = io.BytesIO(gif_file)
img = Image.open(image)
img = ImageTk.PhotoImage(img)
canvas.create_image(400,50,image = img)
canvas.pack()
三、io.BytesIO
很多时候,数据读写不一定是文件,也可以在内存中读写。操作二进制数据,使用BytesIO。
BytesIO实现了在内存中读写bytes,我们创建一个BytesIO,然后写入一些bytes:
>>> from io import BytesIO
>>> f=BytesIO()
>>> f.write('中文'.encode('utf-8'))
6
>>> f.getvalue()
b'\xe4\xb8\xad\xe6\x96\x87'
输出:\xe4\xb8\xad\xe6\x96\x87,这是控制台信息输出窗口按照ascii(字节)编码输出utf8编码的字符串的结果。