如何使用Python将日期时间属性添加到JPG文件中,以便在Google相册中正确建立索引?

时间:2019-11-09 14:10:08

标签: python python-2.7 jpeg exif google-photos

我正在使用摄影机套件来生成将日期时间另存为文件名(例如“ 2019-10-24-10-06-56.jpg”)的图像,而不是其元数据中的图像。我正在尝试编写一个Python脚本,使我能够从它们的文件名中提取日期时间,并将其添加到每个文件的日期时间元数据属性中。这样我就可以上传到Google相簿,以正确的时间索引。

根据我的收集,Google相册使用了“创建的”日期时间属性,因此我认为这是我需要为每个JPG文件进行更改的内容。最好的方法是什么?我已经尝试了一些方法,包括更改EXIF数据(成功地使用piexif),但这似乎并没有改变Windows中显示的图像属性,并且仍然无法在Google相册中正确索引。

如果可能,热衷于在Python中执行此操作(我正在使用Python 2.7)-已经编写了从文件名中提取日期时间的代码。

以下代码似乎可以成功更改EXIF数据:

from datetime import datetime
import piexif
import os

jpgFolder = r"C:\Users\srgan\Desktop\Naturewatch Camera Photos\NaturewatchCameraPhotos_24Oct19"

## count number of photos found
listOfFiles = os.listdir(jpgFolder)
fileCount = len(listOfFiles)

## create datetimeString from JPG filename
for jpg in os.listdir(jpgFolder):
    filepath = jpgFolder + "\\" + jpg
    year = jpg[0:4]
    month = jpg[5:7]
    day = jpg[8:10]
    hour = jpg[11:13]
    mins = jpg[14:16]
    datetimeStringNew = day + "/" + month + "/" + year + " " + hour + ":" + mins

## change exif datetimestamp for "Date Taken"
    exif_dict = piexif.load(filepath)
    exif_dict['Exif'] = { piexif.ExifIFD.DateTimeOriginal: datetime(2019, 10, 25, 1, 1).strftime("%d:%m:%Y %H:%M") }
    exif_bytes = piexif.dump(exif_dict)
    piexif.insert(exif_bytes, filepath)

正确返回以下内容:

{'Exif': {36867: '25:10:2019 01:01'}, '0th': {34665: 26}, 'Interop': {}, '1st': {}, 'thumbnail': None, 'GPS': {}}

,但这在正确上传到Google相册后的image properties in Windows (1) / image properties (2) /日期中没有反映出来。

谢谢!

欢乐地理学家 (不是经验丰富的编码人员,因此对任何愚蠢的问题表示歉意)

1 个答案:

答案 0 :(得分:0)

首先感谢您的发帖-我遇到了类似的问题,您的代码给了我一些很好的提示!

我的问题在上传后发生,因为Exif中没有GMT / UTC标签,因此对于google照片,当没有GPS数据时,它会在上传位置的前提下上传数据匹配拍摄照片的时区(例如GMT + 11)。您可以选择VPN到该位置,或者通过选择最近上传的内容更改上传后的所有照片,并选择“编辑日期和时间”位置并相对地重新调整时间。

第二,我发现同时更新DateTimeOriginal和DateTimeDigitized似乎很有帮助。

第三,我认为Exif数据的日期格式为 yyyy:mm:dd hh:mm:ss ,所以我也在下面进行了更新。

此外,我使用datetime字符串解析器将您现有的filedate转换为python date

这是我对您的代码的看法,可能会对您有所帮助(并保留其余的Exif数据!)

from datetime import datetime
import piexif
import os

jpgFolder = r"C:\Users\srgan\Desktop\Naturewatch Camera Photos\NaturewatchCameraPhotos_24Oct19"

## count number of photos found
listOfFiles = os.listdir(jpgFolder)
fileCount = len(listOfFiles)

## create datetimeString from JPG filename
for jpg in os.listdir(jpgFolder):
    filepath = jpgFolder + "\\" + jpg

    parsedate=datetime.strptime(jpg[0:16], "%Y-%m-%d-%H-%M-%S")
## change exif datetimestamp for "Date Taken"
    exif_dict = piexif.load(filepath)
    newExifDate=parsedate.strftime("%Y:%m:%d %H:%M:%S")
    exif_dict['Exif'][piexif.ExifIFD.DateTimeOriginal]=newExifDate
    exif_dict['Exif'][piexif.ExifIFD.DateTimeDigitized]=newExifDate
    exif_bytes = piexif.dump(exif_dict)
    piexif.insert(exif_bytes, filepath)