在一个项目的过程中,需要matplotlib生成图片,并且生成图片之后,要把元数据信息中的text修改为指定格式,在后期过程中,要求text键值对中间的分割符是冒号(:)。此过程查找资料解决问题不容易,特此记录。
在项目进行过程中,想过直接修改生成的text信息,但是实在是没用找到相关资料。只能记录一下 我目前实现的逻辑。
第一 用matplotlib生成图片
第二 使用PIL库中的 Image, PngImagePlugin 库修改text中的信息
因为第二使用此库生成的文件中,text信息中的键值对默认是使用\00
作为分隔符,不符合要求需要修改成使用":“分割。因此需要第三步。
第三 使用pypng库修改第二步中生成文件中的键值对分割符修改为”:"
用matplotlib生成png图片
plt.savefig(self.filename)
from PIL import Image, PngImagePlugin
data = {}
with open('./data/header.txt', 'r') as file:
for line in file:
line = line.strip() # 去除首尾空格和换行符
if line: # 确保不是空行
key, value = line.split(':')
data[key] = value
try:
img = Image.open(self.filename)
except IOError:
exit()
png_info = PngImagePlugin.PngInfo()
for key in data.keys():
png_info.add_text(key, data[key])
img.save(self.filename, pnginfo=png_info)
import pypng
def my_generator(chunks):
for key, value in chunks:
if key == b"tEXt":
if b"\x00" in value:
value = value.replace(b"\x00", b":")
yield (key, value)
im = png.Reader(filename)
chunks = im.chunks()
with open(filename, 'rb+') as f:
png.write_chunks(f, chunks=my_generator(chunks))