我是Python的新手,我正在尝试编译一个文本(.txt)文档,该文档充当保存文件,可以在以后加载。
我希望它是一个独立的文档,其中包含用户正在使用的所有属性(包括我希望在文件中保存为编码的base64二进制字符串的一些图像)。
我已经编写了程序并且它正确地将所有内容保存到文本文件中(尽管我必须通过str()传递编码值)但是我以后无法访问图像进行解码。以下是我创建文本信息的示例:
if os.path.isfile("example.png"): #if the user has created this type of image..
with open("example.png", "rb") as image_file:
image_data_base64_encoded_string = base64.b64encode(image_file.read())
f = open("example_save.txt",'a+')
f.write("str(image_data_base64_encoded_string)+"\n")
f.close() #save its information to the text doc
以下是我尝试重新访问此信息的一个例子。
master.filename = filedialog.askopenfilename(initialdir = "/",title = "Select file",filetypes = ((".txt files","*.txt"),("all files","*.*")))
with open(master.filename) as f:
image_import = ((f.readlines()[3]))#pulling the specific line the data string is in
image_imported = tk.PhotoImage(data=image_import)
这只是我最近的许多尝试 - 仍然会返回错误。我尝试在传递给tkinter PhotoImage函数之前对编码信息进行解码,但我认为Python可能会将编码信息视为字符串(因为我在保存信息时将其设置为一个)但我不知道如何更改它改变信息。
任何帮助将不胜感激。
答案 0 :(得分:0)
当您写出这样的值时:
str(image_data_base64_encoded_string)
编写如下:
b'...blah...'
查看您正在撰写的文件,您会发现该行被b' '
包围。
您希望将二进制文件解码为适合您文件的编码,例如:
f.write(image_data_base64_encoded_string.decode('utf-8') + "\n")
答案 1 :(得分:0)
我建议使用Pillow模块处理图像,但如果您坚持当前的方式,请尝试以下代码:
from tkinter import *
import base64
import os
if os.path.isfile("example.png"): #if the user has created this type of image..
with open("example.png", "rb") as image_file:
image_data_base64_encoded_string = base64.b64encode(image_file.read())
f = open("example_save.txt",'a+')
f.write(image_data_base64_encoded_string.decode("utf-8")+"\n")
f.close()
filename = filedialog.askopenfilename(initialdir = "/",title = "Select file",filetypes = ((".txt files","*.txt"),("all files","*.*")))
with open(filename) as f:
image_import = f.readlines()[3].strip()
image_imported = PhotoImage(data=image_import)
您看到您的字符串需要为utf-8,并且尾随的换行符也阻止PhotoImage()
将图像数据解释为图像。