我们都知道,微信保存的图片是不包含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
格式的图片,如果您有其他格式图片,需要根据情况进行相应的调整。