解决群晖不按照Exif拍摄时间排序的问题

代码片段, 折腾 2024/11/24

接上文 记录一次群晖误删文件的找回,我恢复了所有的照片,但新问题又来了

不知道咋回事,Synology Photo套件里,我明明是按照【拍摄时间】排序的

但所有照片全部按照文件的【修改时间】排序了

这里是修改时间,也就是我的文件恢复日期

Exif拍摄日期也是正常能读取,奇了怪的

搜索半天也没找到合适的方法,于是就想到一个骚招

批量扫描指定目录的所有照片,读取Exif,直接将文件的【修改日期】替换为【拍摄日期】

搞完以后,重新建立一下索引就正常了~ :doge:

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)

 

本文标签:


评论(本站已开启评论回复邮件通知功能,请如实填写邮箱以便及时收到回复)