Python批量修改照片日期
Posted BHY_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python批量修改照片日期相关的知识,希望对你有一定的参考价值。
需求
最近整理老照片,有一些照片缺失日期信息,或者日期显示错误,传到手机相册就会显示在上传的这一天,导致时间线错乱。
因为照片文件名包含日期(比如IMG_20210422_075810.jpg),所有可以根据文件名修改照片日期,这样在手机里就可以按照时间线排列了,主要利用piexif库修改JPG照片的Exif信息。
# 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]'
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
try:
print(photoName)
setDate(photoName, photoPwd)
except BaseException:
print(" -- error")
continue
if __name__ == '__main__':
'''
folder: 文件夹路径
'''
folder = r"D:\\图片"
changePhotoTime(folder)
以上是关于Python批量修改照片日期的主要内容,如果未能解决你的问题,请参考以下文章