Python中将PNG图片保存为指定格式JSON文件的技术问题
解决PNG转JPEG并生成指定格式JSON的问题
要满足你的需求,需要完成两个核心步骤:将PNG图片转换为JPEG格式,以及生成符合要求的data:image/jpeg;base64,...格式字符串,再序列化到JSON中。以下是具体解决方案:
1. 依赖安装
首先需要安装Pillow库来处理图片格式转换:
pip install pillow
2. 完整代码实现
import base64 import json from PIL import Image import io # 读取PNG图片并转换为JPEG格式 with Image.open('example_png.png') as img: # 创建内存字节流存储JPEG数据 img_byte_arr = io.BytesIO() # 转换为JPEG,PNG的透明通道会被转为白色背景 img.convert('RGB').save(img_byte_arr, format='JPEG') # 获取JPEG字节数据 img_data = img_byte_arr.getvalue() # 对JPEG字节数据进行base64编码并转为字符串 enc_data = base64.b64encode(img_data).decode('utf-8') # 拼接成要求的data URI格式 image_uri = f'data:image/jpeg;base64,{enc_data}' # 保存到JSON文件 with open('example_png.json', 'w') as f: json.dump({'image': image_uri}, f)
问题解析
原代码的问题:
- 直接编码PNG原始字节,未转换为JPEG格式,无法匹配
data:image/jpeg前缀; - 最初未将
base64.b64encode返回的bytes对象解码为字符串,触发TypeError: Object of type bytes is not JSON serializable; - 解码后仅生成纯base64字符串,缺少要求的
data:image/jpeg;base64,前缀,导致格式不符合要求。
- 直接编码PNG原始字节,未转换为JPEG格式,无法匹配
注意事项:PNG图片可能包含透明通道,而JPEG不支持透明,代码中
img.convert('RGB')会将透明区域默认填充为白色,若需要自定义背景色可额外处理。
内容的提问来源于stack exchange,提问作者YoungGun
相关产品推荐
相关产品推荐

