在 python 中将 png 图像保存到 json 文件 [重复]

Saving a png image to json file in python [duplicate]

提问人:YoungGun 提问时间:11/4/2023 更新时间:11/4/2023 访问量:74

问:

我需要在 python 中将 png 图像保存到 json 文件中。此外,json 文件的开头必须如下所示:

{"image":"data:image/jpeg;base64,/etc.

我怀疑这意味着我还需要将其转换为jpeg格式。

这是我到目前为止尝试过的:

import base64, json

filename = 'example_png.png'
f = open(filename, 'rb')
img_data = f.read()
f.close()
enc_data = base64.b64encode(img_data)

json.dump({'image':enc_data}, open('example_png.json', 'w'))

这导致了以下错误:TypeError: Object of type bytes is not JSON serializable

我还玩过解码。例如,我添加了

enc_data = enc_data.decode('utf-8')

在保存到 JSON 文件之前。然后将某些内容保存到文件中,但显然格式不正确。

如果有任何帮助,我将不胜感激。

json python-3.x base64 png jpeg

评论

0赞 jps 11/4/2023
基本上,你有 3 个问题。1)错误消息(您已经修复),2)从PNG到JPG的格式转换,以及3)正确的输出字符串。关于 1) 返回一个字符串,但作为字节,因此 ' .encode()' 是正确的,并将结果转换为字符串。2) 字符串是 PNG 图像的 base64 表示形式,任何地方都不会发生转换。3)您的JSON文件将如下所示,您需要添加“data:image/jpeg;base64“,位于 Base64 字符串前面。所以剩下的问题是转换为jpg。b64encode(){"image": "iVBORw..."}
0赞 jps 11/4/2023
如果转换为jpg很重要,请参阅链接的Q / A。

答:

1赞 Andrej Kesely 11/4/2023 #1

尝试:

import base64
import json

filename = "your_image.png"

with open(filename, "rb") as f_in, open("example_png.json", "w") as f_out:
    enc_data = base64.b64encode(f_in.read()).decode("utf-8")
    json.dump({"image": f"data:image/png;base64,{enc_data}"}, f_out)

编辑:要将图像转换为Jpeg并将其保存到Json,您可以使用模块:Pillow

import base64
import json
from io import BytesIO

from PIL import Image

filename = "<your image.jpg|png>"

with open("example_png_jpeg.json", "w") as f_out:
    png_image = Image.open(filename)
    jpg_buffer = BytesIO()
    png_image.save(jpg_buffer, format="JPEG")

    enc_data = base64.b64encode(jpg_buffer.getvalue()).decode("utf-8")
    json.dump({"image": f"data:image/jpeg;base64,{enc_data}"}, f_out)

评论

1赞 Andrej Kesely 11/4/2023
@MarkSetchell我已经更新了我的 anwer。
1赞 YoungGun 11/4/2023
谢谢!我收到一条错误消息,但添加了以下行:if png_image.mode != 'RGB': png_image = png_image.convert('RGB'),然后它起作用了!