在 Python 中更新 png 文件中的元数据注释

问题描述

我正在尝试更新元数据评论(详细信息 -> 描述 -> 评论) 在图像文件(jpg格式)中基于目录中的一堆图像 一定的标准。元数据注释是由空格分隔的字符串值。 元数据评论示例 - “ABC 123 07-04-21”等。请参阅附图。

enter image description here

我在与图像存储在同一目录中的 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

分享任何想法/代码片段。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...