python - 在 Python 中更新 png 文件中的元数据注释
问题描述
我正在尝试根据特定标准为目录中的一堆图像更新图像文件(jpg 格式)中的元数据注释(详细信息 -> 描述 -> 注释)。元数据注释是由空格分隔的字符串值。元数据注释示例 - “ABC 123 07-04-21”等。请参见附图。
我在与图像存储在同一目录中的 csv 文件中获得了一堆图像文件和注释。我需要将图像文件名与目录中存在的文件进行匹配,并将 csv 文件中的注释更新为图像元数据注释(详细信息 -> 描述 -> 注释)。
我尝试了几件事。能够找到如何更新 jpg 文件中的评论,尽管适用于单个图像。
用于更新单个 JPG 文件中的注释的代码段。编码对于实际查看 jpg 文件中更新的注释至关重要。
im = Image.open("20210430.jpg")
exif_dict["0th"][piexif.ImageIFD.XPComment] = "Test comments 12345".encode('utf-16le')
exif_bytes = piexif.dump(exif_dict)
im.save("20210430.jpg.jpg", exif=exif_bytes)
我尝试过的几件事:
from PIL import Image
import piexif
import pandas as pd
import glob
import os
--dataframe to store list of image file names and comments to update.
df1= pd.read_csv('FinalImageMetaData.csv')
--dataframe which has list of images file names in the directory.
df2=pd.read_csv('ListImage.csv')
merged_inner = pd.merge(left=df2, right=df1, left_on='IMAGE_NAME', right_on='IMAGE_NAME')
#merged_inner[['METADATA']]
images = glob.glob(r"C:.\.\Programs\*.jpg")
for image in images:
with open(image, 'rb') as file:
img = Image.open(file)
exif_dict = piexif.load(img.info["exif"])
exif_dict["0th"][piexif.ImageIFD.XPComment] = merged_inner[['METADATA']].encode('utf-16le')
exif_bytes = piexif.dump(exif_dict)
img.save(file, exif=exif_bytes)
FinalImageMetaData.csv 的示例内容
IMAGE_NAME,METADATA
20210430.jpg,12345 02/27/2021 00:00:00
20210429.jpg,34567 02/27/2021 00:00:00
20210428.jpg,90897 02/27/2021 00:00:00
20210427.jpg,56789 02/27/2021 00:00:00
20210426.jpg,34567 02/27/2021 00:00:00
ListImage.csv 的示例内容
IMAGE_NAME
20210430.jpg
20210429.jpg
20210428.jpg
20210427.jpg
20210426.jpg
20210425.jpg
20210424.jpg
20210423.jpg
20210422.jpg
请分享任何想法/代码片段。
解决方案
推荐阅读
- python - Python OpenCV 在时间间隔线程中获取数据
- javascript - 使用默认 MUI 主题而不是在父反应应用程序中注入的自定义主题的反应库
- c++ - 如何使用模板参数浮动定义模板类 C 的构造函数,模板参数可以转换为浮动?
- node.js - 如何使用猫鼬建立现有文档之间的关系
- php - 在 Magento 2 中通过 URL 获取完整的操作名称
- c - 为什么没有返回值的函数在其堆栈之外修改字符串
- javascript - 等待用户完成输入并检查它是否是一个设置的答案 javascript
- java - 使用 Apache Beam XmlIO 读取带有命名空间的 XML
- c - 如何确保对无符号整数的操作不会导致换行
- reactjs - 'number' 类型的参数不能分配给 'SetStateAction<{ count1: number; 类型的参数;count2:数字;}>'