如何使用Python将日期时间属性添加到我的JPG文件中,以便在Google照片中进行正确的索引?
我正在使用照相工具包,它可以生成日期时间保存为文件名的图像(例如“2019-10-24-10-06-56.jpg”),而不是保存在元数据中。我正试图编写一个Python脚本,使我能够从文件名中提取日期时间,并将每个文件的日期时间元数据属性添加到其中。这样我就可以上传到谷歌照片,以便按时间顺序编制正确的索引 据我所知,谷歌照片使用“创建”日期时间属性,所以我相信这是我需要为每个JPG文件更改的内容。最好的方法是什么?我尝试了一些事情,包括更改EXIF数据(成功地使用了piexif),但这似乎并没有改变Windows中显示的图像属性,而且它仍然无法在Google照片中正确索引 如果可能的话,我很想在Python中这样做(我使用的是Python 2.7)——已经编写了从文件名中提取日期时间的代码 以下代码显示为成功更改EXIF数据:如何使用Python将日期时间属性添加到我的JPG文件中,以便在Google照片中进行正确的索引?,python,python-2.7,jpeg,exif,google-photos,Python,Python 2.7,Jpeg,Exif,Google Photos,我正在使用照相工具包,它可以生成日期时间保存为文件名的图像(例如“2019-10-24-10-06-56.jpg”),而不是保存在元数据中。我正试图编写一个Python脚本,使我能够从文件名中提取日期时间,并将每个文件的日期时间元数据属性添加到其中。这样我就可以上传到谷歌照片,以便按时间顺序编制正确的索引 据我所知,谷歌照片使用“创建”日期时间属性,所以我相信这是我需要为每个JPG文件更改的内容。最好的方法是什么?我尝试了一些事情,包括更改EXIF数据(成功地使用了piexif),但这似乎并没有
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': {}}
但这并没有反映在上传到谷歌照片的日期上
谢谢
快乐的地理学家
(不是一个有经验的程序员,所以对任何愚蠢的问题表示歉意)首先感谢您的发帖-我有类似的问题,您的代码给了我一些很好的提示 我的问题发生在上传后,因为Exif中没有GMT/UTC标记,所以对于谷歌照片,当没有GPS数据时,它会上传数据,并假设上传位置与拍摄照片的时区(例如GMT+11)匹配。您可以通过选择最近的上传,“编辑日期和时间”选择新位置并重新调整时间,将VPN连接到该位置,或者在上传后更改所有照片 其次,我发现更新DateTimeOriginal和DateTimeDigitalized似乎都有帮助 第三,我认为Exif数据的日期格式是yyyy:mm:dd hh:mm:ss,因此我也在下面对其进行了更新 此外,我还使用了datetime字符串解析器将现有的filedate转换为python日期 下面是我对您的代码的看法,这可能会对您有所帮助(并保留其余的Exif数据!)
首先感谢你的发帖-我有类似的问题,你的代码给了我一些好的提示 我的问题发生在上传后,因为Exif中没有GMT/UTC标记,所以对于谷歌照片,当没有GPS数据时,它会上传数据,并假设上传位置与拍摄照片的时区(例如GMT+11)匹配。您可以通过选择最近的上传,“编辑日期和时间”选择新位置并重新调整时间,将VPN连接到该位置,或者在上传后更改所有照片 其次,我发现更新DateTimeOriginal和DateTimeDigitalized似乎都有帮助 第三,我认为Exif数据的日期格式是yyyy:mm:dd hh:mm:ss,因此我也在下面对其进行了更新 此外,我还使用了datetime字符串解析器将现有的filedate转换为python日期 下面是我对您的代码的看法,这可能会对您有所帮助(并保留其余的Exif数据!)
你还得用pexif。研究谷歌照片实际使用的信息(看起来是和修改该字段。一旦您确定了要更改的属性,但仍然无法使其正常工作,请用您的代码发布一个问题,以及与您期望的相比会发生什么情况,我们可能会从那里得到帮助。好的,很好,我们会尽快完成,谢谢Martijn问题更新了我尝试的代码。我查看了“标记为重复”的其他问题,我相信这会做和我尝试过的相同的事情?你仍然需要使用pexif。研究谷歌照片实际使用的信息(看起来是和修改该字段。一旦您确定了要更改的属性,但仍然无法使其正常工作,请用您的代码发布一个问题,以及与您期望的相比会发生什么情况,我们可能会从那里得到帮助。好的,很好,我们会尽快完成,谢谢Martijn问题更新了我尝试的代码。我查看了“标记为重复”的其他问题,我相信这会做我尝试过的相同的事情?
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)