我正在使用以下Python代码在Windows 10上尝试编辑由Nikon Scan 4.0.3创建的tif图像文件的EXIF信息,其中包括"Date Taken"。
import piexif
def setImageDateTakenAttribute(filename, date_taken):
exif_dict = piexif.load(filename)
exif_dict['Exif'] = {
piexif.ExifIFD.DateTimeOriginal: datetime.datetime(*date_taken[:6]).strftime("%Y:%m:%d %H:%M:%S")
}
exif_bytes = piexif.dump(exif_dict)
piexif.insert(exif_bytes, filename)
在Python 3中,对于jpeg文件这样做是可以的,但当我尝试使用相同的代码编辑我的tif文件时,就会出现以下错误:
setImageDateTakenAttribute(full_path, folder_date)
File "image-and-movie-bulk-creation-dates.py", line 78, in setImageDateTakenAttribute
piexif.insert(exif_bytes, filename)
File "C:\Python37\lib\site-packages\piexif\_insert.py", line 39, in insert
raise InvalidImageDataError
piexif._exceptions.InvalidImageDataError
到目前为止,我一直在寻找其他可能支持我的文件的软件包,但都没有成功。
有人知道如何在Python中完成编辑而不删除现有的exif信息,并且不更改图像格式吗?
要重新创建或获取失败的tif文件样本,请克隆我的项目(下面是链接)。
细节:
将成千上万张图片扫描为tif文件后,我想指定“拍摄日期”的EXIF值。我正在编写一个Python脚本在Windows(BitBucket)中完成此操作,该脚本还将根据以YYYY-MM-DD *开头的预定义文件夹命名约定编辑“创建日期”和“修改日期”。最后两个任务对于tif文件和jpeg文件都起作用,但对于tif则无法使用EXIF。
更新:
运行exif工具后,我得到了输出,但其中缺少creation date节点,但在Windows上设置日期之后,出现了“Create Date”和“Date / Time Original”字段。另外,对XMP元值进行原始文本打印后,在Windows设置创建日期后会添加一个名为xmp:createdate的节点。然而,我仍然无法弄清如何首次在文件中创建这些字段。
更新2:
看起来Exif无法处理来自Nikon Scan(2005)的文件。唯一的选择是在文件中添加xmp:createdate节点的XMP信息。如果有人能向我展示如何完成此操作,无论是通过纯Python还是在Windows上从Python调用单独的工具,都将获得完整的赏金。