需求
最近整理老照片,有一些照片缺失日期信息,或者日期显示错误,传到手机相册就会显示在上传的这一天,导致时间线错乱。
因为照片文件名包含日期(比如IMG_20210422_075810.jpg),所有可以根据文件名修改照片日期,这样在手机里就可以按照时间线排列了,主要利用piexif库修改JPG照片的Exif信息。
Python代码
# photo time correction
# 2021.04 @Wendell
# 需求:一些照片exif里面没有日期信息,传到手机就会显示在上传的这一天,导致时间线错乱
# 发现文件名包含日期,根据文件名修改照片日期,这样在手机里就可以按照时间线排列了
import os
import piexif
def checkFormat(photoPwd):
'''
检查文件类型是否为图片格式
'''
(root, ext) = os.path.splitext(photoPwd)
return str.upper(ext[1:]) # 返回文件后缀类型
def getTime(photoName):
'''
根据文件名特征提取照片拍摄日期,转换为Exif时间格式
from 'IMG_20210422_075810.jpg' to '2024:04:22 07:58:10'
'''
pN = photoName
# from IMG_20210422_075810.jpg to 2024:04:22 07:58:10
imgTime = f'{pN[4:8]}:{pN[8:10]}:{pN[10:12]} {pN[13:15]}:{pN[15:17]}:{pN[17:19]}'
return imgTime
def setDate(photoName, photoPwd):
'''
给没有时间的照片加上时间
'''
imgTime = getTime(photoName)
# 设置Exif信息
exif_dict = piexif.load(photoPwd) # 读取现有Exif信息
exif_dict['0th'][piexif.ImageIFD.DateTime] = imgTime # 注意DateTime在ImageIFD里面
exif_dict['Exif'][piexif.ExifIFD.DateTimeOriginal] = imgTime
exif_dict['Exif'][piexif.ExifIFD.DateTimeDigitized] = imgTime
exif_bytes = piexif.dump(exif_dict)
# 插入Exif信息
piexif.insert(exif_bytes, photoPwd)
def changePhotoTime(folder):
"""
修改该路径下的所有JPG照片的时间
"""
for photoName in os.listdir(folder):
photoPwd = os.path.join(folder, photoName) # 照片的绝对路径
if checkFormat(photoPwd) == 'JPG': # 如果是JPG
setDate(photoName, photoPwd)
if __name__ == '__main__':
'''
folder: 文件夹路径
'''
folder = r"D:\照片\测试"
changePhotoTime(folder)
转载自:https://blog.csdn.net/lifeofwww/article/details/116094399