python - 将 .png 图像转换为 base64

标签 python tkinter

我正在尝试将 .png 图像编码为 base64,这样人们就不需要拥有我的图片/更改图片即可查看它。

我搜索了很多并尝试了很多东西,我最后一次尝试得到了这个错误:

Traceback (most recent call last):
  File "random.py", line 100, in <module>
    convert(r"C:\Users\simon\Desktop\pictures\pizza_pics\meat_lovers.png")
  File "random.py", line 91, in convert
    data = f.read()
  File "C:\Users\simon\AppData\Local\Programs\Python\Python36-32\lib\encodings\c  p1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 30: chara  cter maps to <undefined>

我调查了 0x8d 是什么,但没有发现任何有用的或我真正理解的东西。

这是我的代码:

#encodes the images from .jpg or .png files to base64 string(lets others view the image)
def convert(image):
    img = open(image)
    data = img.read()

    string = base64.b64encode(data)
    convert = base64.b64encode(string)

    img = Image.open(r"C:\Users\simon\Desktop\pictures\pizza_pics\meat_lovers.png", "UTF-8")
    img.write(convert)

if __name__ == "__main__":
    convert(r"C:\Users\simon\Desktop\pictures\pizza_pics\meat_lovers.png")

#shows the image
img.thumbnail((350, 200), Image.ANTIALIAS)
photo = ImageTk.PhotoImage(image = img)
label_image = tk.Label(image = photo)
label_image.grid(column=0, row=2, padx=(5, 95))

最佳答案

我真的不能指出你做错了什么,但代码似乎比它必须的更复杂。

base64 模块为您处理,而不是执行读取操作

import base64
with open('noaa19-161015.png', 'rb') as fp, open('test.b64', 'w') as fp2:
    base64.encode(fp, fp2)

with open('test.b64', 'rb') as fp, open('test.png', 'wb') as fp2:
    base64.decode(fp, fp2)

还注意到您正在尝试对已编码的 string 进行编码 查看行 base64.b64encode(string)

关于python - 将 .png 图像转换为 base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43446353/

相关文章:

python - 如何将列表转换为具有重复键的字典?

python - 如何设置 tkinter 比例 slider 的颜色?

python - 如何在命令函数调用中避免全局变量

python - 如何处理协程函数的多个结果?

python - 使用 PrintfTickFormatter 将 Bokeh x 轴从十进制格式化为百分比

python - tkinter - 设置几何而不显示窗口

python - 如何将图片作为值添加到 Tkinter Treeview 中?

python - 如何使 tkinter 按钮与我的脚本交互?

python - 开发Dilbert卡通图像分类算法的一般方法

python - Redis:如果 python 不存在,则创建一个 ttl'd ('expires' ) 键?