【Python】批量修改照片日期

需求
最近整理老照片,有一些照片缺失日期信息,或者日期显示错误,传到手机相册就会显示在上传的这一天,导致时间线错乱。

因为照片文件名包含日期(比如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