解决群晖不按照Exif拍摄时间排序的问题
接上文 记录一次群晖误删文件的找回,我恢复了所有的照片,但新问题又来了
不知道咋回事,Synology Photo套件里,我明明是按照【拍摄时间】排序的
但所有照片全部按照文件的【修改时间】排序了
这里是修改时间,也就是我的文件恢复日期
Exif拍摄日期也是正常能读取,奇了怪的
搜索半天也没找到合适的方法,于是就想到一个骚招
批量扫描指定目录的所有照片,读取Exif,直接将文件的【修改日期】替换为【拍摄日期】
搞完以后,重新建立一下索引就正常了~
Python:
from PIL import Image
from PIL.ExifTags import TAGS
import os
from datetime import datetime
def get_exif_date_taken(image_path):
try:
image = Image.open(image_path)
exif_data = image._getexif()
if exif_data is not None:
for tag, value in exif_data.items():
if TAGS.get(tag) == 'DateTimeOriginal':
return value
except Exception as e:
print(f"Error reading EXIF data: {e}")
return None
def set_file_modification_date(image_path):
date_taken = get_exif_date_taken(image_path)
if date_taken:
# 转换为时间戳
try:
date_taken_obj = datetime.strptime(date_taken, '%Y:%m:%d %H:%M:%S')
timestamp = date_taken_obj.timestamp()
# 修改文件的修改时间
os.utime(image_path, (timestamp, timestamp))
print(f"File modification date updated to: {date_taken} for {image_path}")
except Exception as e:
print(f"Error setting file date: {e}")
else:
print(f"No EXIF date found for {image_path}.")
def process_directory(directory):
for root, dirs, files in os.walk(directory):
for file in files:
# 检查文件是否是图片文件,依据文件扩展名
if file.lower().endswith(('.jpg', '.jpeg', '.png', '.gif', '.tiff')):
image_path = os.path.join(root, file)
set_file_modification_date(image_path)
# 替换为你的目录路径
directory_path = "\\\\NAS-Main\\photo\\家里人\\"
process_directory(directory_path)