我想在Python中打开一个PNG图像,向其中添加一些自定义数据,保存该图像文件,然后稍后再次将其打开以检索数据。我正在使用Python 3.7。我宁愿使用PNG图像格式,但如果没有其他选择的话,可以移至其他格式。
在更新PNG标准以允许将自定义数据存储在其中之前,我已经阅读了许多过时的答案和文章。我想就今天(2019年10月)提供的答案,或者,如果启用了一些有用的功能,当然将来会接受更新的答案。确实很难搜索此类特定问题,因为“保存”,“ png”,“ python”,“信息”都是非常通用的术语。
我可以使用Pillow(目前为6.2.0)来检索一些数据。我无法解决的是如何将更多的exif数据存储到png中。
from PIL import image
targetImage = Image.open("pathToImage.png")
targetImage.info["MyNewString"] = "A string"
targetImage.info["MyNewInt"] = 1234
targetImage.save("NewPath.png")
当我保存时,以上内容会丢失信息。我看过一些使用文档,targetImage.save("NewPath.png", exif=exif_bytes)
但仅适用于exif格式的数据。我查看了piexif
和piexif2
软件包,但它们要么仅支持JPEG,要么不允许自定义数据。
我不介意信息是否以iTXt,tEXt或zTXt块存储在PNG中。有关格式的说明,请参见https://dev.exiv2.org/projects/exiv2/wiki/The_Metadata_in_PNG_files。
我对Python还是很陌生,所以如果我错过了文档中一些明显的东西,而实践者会认识到这一点,我深表歉意。如果解决方案已经存在,我真的不想重新发明轮子。
您可以使用PngImageFile
和PngInfo
从这样的PngImagePlugin
模块中将元数据存储在Pillow中:
from PIL.PngImagePlugin import PngImageFile, PngInfo
targetImage = PngImageFile("pathToImage.png")
metadata = PngInfo()
metadata.add_text("MyNewString", "A string")
metadata.add_text("MyNewInt", str(1234))
targetImage.save("NewPath.png", pnginfo=metadata)
targetImage = PngImageFile("NewPath.png")
print(targetImage.text)
>>> {'MyNewString': 'A string', 'MyNewInt': '1234'}
在此示例中,我使用tEXt,但是您也可以使用将其保存为iTXt add_itxt
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句