在 Windows 10 上使用以下 Python 代码,我正在尝试在使用 Nikon Scan 4.0.3(2008 年左右的软件)创建的 tif 图像文件上编辑“拍摄日期”的 EXIF 信息。
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
到目前为止,我一直在寻找其他可能支持我的文件的软件包,但无济于事。
有谁知道如何在不删除现有 exif 信息且不更改图像格式的情况下在 Python 中完成编辑?
要重现或获取失败 tif 文件的样本,请克隆我的项目(链接如下)。
细节:
在将数千张图片扫描到 tif 文件后,我想为“拍摄日期”指定 EXIF 值。我正在编写一个 Python 脚本来在 Windows (BitBucket)中执行此操作,它还将从以 YYYY-MM-DD * 开头的预定义文件夹命名约定中编辑“创建日期”和“修改日期”。最后两个任务适用于 tif 文件和 jpeg,但 EXIF 不适用于 tif。
更新:
运行 exif 工具,我得到没有创建日期节点的输出,但是在使用文件属性在 Windows 中设置日期后,出现“创建日期”和“日期/时间原始”字段。此外,在 Windows 中设置创建日期后,XMP 元值的原始文本打印输出会提供一个名为 xmp:createdate 的添加节点。我仍然不知道如何第一次在文件中创建这些字段。
更新 2:
看起来 Exif 不适用于 Nikon Scan (2005) 中的文件。唯一的选择是将 xmp:createdate 节点添加到文件中的 XMP 信息中。如果有人可以向我展示这是如何完成的,无论是在纯 Python 中,还是通过在 Windows 上从 python 调用一个单独的工具,它都应该得到充分的赏金。