将Base64字符串转换为tkin中的图像

2024-10-01 11:24:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个图像,我正在我的图形用户界面中使用,我不希望它作为一个外部资源,当我编译.exe或我的.py。 我想我应该把它编码成一个字符串,在代码中复制这个字符串,然后解码它并将它提供给Tkinter。尝试了一系列解决方案,但仍然无效,代码如下:

import tkinter as tk
from tkinter import filedialog
from tkinter import *
import PIL
from PIL import Image, ImageTk
import base64


stringimagine="something the print gave me"


imagine=open('logo.jpg','rb')
encoded=base64.b64encode(imagine.read())
print(encoded)
imagine2=base64.b64decode(stringimagine)


fereastra_principala = tk.Tk()



poza=Label(fereastra_principala,image=imagine2)
poza.pack(fill='both',expand='yes')

fereastra_principala.mainloop()

对于此代码,我收到以下错误:

^{pr2}$

这就是我现在用来获取照片的外部资源:

img=Image.open('logo.jpg')
image=ImageTk.PhotoImage(img)
poza=Label(fereastra_principala,image=image)
poza.pack()

Tags: 字符串代码fromimageimportpiltkinter资源
2条回答

如果有base64编码的数据,则需要使用data参数。然而,我不认为这对jpg有效。但它对.gif图像有效。在

这是canonical documentation对data选项的说明:

^{bq}$

示例

import Tkinter as tk

IMAGE_DATA = '''
    R0lGODlhEAAQALMAAAAAAP//AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAA\nAAAAACH5BAEAAAIALAAAAAAQABAAQAQ3UMgpAKC4hm13uJnWgR
    TgceZJllw4pd2Xpagq0WfeYrD7\n2i5Yb+aJyVhFHAmnazE/z4tlSq0KIgA7\n
    '''

root = tk.Tk()
image = tk.PhotoImage(data=IMAGE_DATA)
label = tk.Label(root, image=image, padx=20, pady=20)
label.pack()

root.mainloop()

有办法:

假设image='abc'是用b64编码的图像字符串。在

def install():
    if not os.path.isfile("logo.jpg"):
        open('logo.jpg','wb').write(base64.b64decode(image))

将在my main()函数中运行此函数,如果该图像不存在于文件夹中,则会创建它。后记,您只需正常加载图像:

^{pr2}$

不过,我还没有找到一个完全不保存图像的解决方案。在

相关问题 更多 >