我们都知道,微信保存的图片是不包含exif时间信息的,但是很少有人知道图片文件名实际上以时间戳方式命名,这样就给我们重新编排图片时间提供了依据。

要编写一个Python程序来批量转换照片的拍摄时间信息,我们可以使用Pillow库处理图片和os库来遍历文件系统,以及datetime库来处理时间戳。以下是一个简单的程序,用于实现这个功能:

首先,请确保安装了Pillow库。如果没有安装,可以使用pip进行安装:

pip install Pillow

根据了解得知,微信保存文件如下格式

文件名:mmexport1405241187825.jpg
时间戳:1405241187825
对应日期:2014年7月12日

然后,可以编写如下的Python脚本:

import os
from PIL import Image
from PIL.ExifTags import TAGS
from datetime import datetime
 
def change_photo_timestamp(image_path, new_timestamp):
    # 打开图片
    img = Image.open(image_path)
 
    # 将新的时间戳转换为EXIF时间格式
    new_exif_time = datetime.fromtimestamp(int(new_timestamp) / 1000).strftime('%Y:%m:%d %H:%M:%S')
 
    # 获取图片的EXIF数据
    exif_data = img.getexif()
 
    # 如果图片有EXIF数据,则更新时间戳
    if exif_data:
        # 修改EXIF时间戳
        exif_data[36867] = new_exif_time  # DateTimeOriginal
        exif_data[36868] = new_exif_time  # DateTimeDigitized
 
        # 将修改后的EXIF数据放回图片
        img.save(image_path, exif=exif_data.tobytes())
 
    # 关闭图片
    img.close()
 
def batch_update_timestamps(directory):
    # 遍历给定目录下的所有文件
    for filename in os.listdir(directory):
        # 检查文件名是否符合微信图片的时间戳格式
        if filename.startswith('mmexport') and len(filename) >= 23 and filename[8:21].isdigit() and filename.lower().endswith('.jpg'):
            # 获取文件的完整路径
            file_path = os.path.join(directory, filename)
            # 微信图片的时间戳是文件名中'mmexport'后的13个字符
            timestamp = filename[8:21]
            # 更新图片的拍摄时间信息
            change_photo_timestamp(file_path, timestamp)
            print(f"Updated timestamp for {filename}")
 
# 调用函数,传入包含图片文件的目录路径
batch_update_timestamps('/path/to/your/directory')

在这个脚本中,我们首先检查文件名是否以mmexport开头,并且确保文件名的长度至少为23个字符,这样我们才能安全地提取出13位的时间戳。然后,我们提取时间戳并将其传递给change_photo_timestamp函数来更新图片的EXIF信息。

请确保将/path/to/your/directory替换为您存储微信图片的实际目录路径。此外,这个脚本只处理.jpg格式的图片,如果您有其他格式图片,需要根据情况进行相应的调整。