LeafSort 是一款基于 Python 开发的图片管理工具,专注于高效管理、智能整理和批量处理各类图片文件。软件支持多种图片格式的快速浏览和管理,提供按时间、地点、设备、类型等多维度自动分类整理功能,基于 MD5 哈希算法进行文件去重,支持 EXIF 元数据的查看和编辑,以及批量重命名和地理编码等操作。

软件功能

图片管理

支持多种图片格式的快速浏览和管理,包括 JPEG、PNG、WebP、HEIC、HEIF 等主流格式,可以快速加载和显示大量图片文件。

智能整理

提供智能整理功能,可以根据图片的拍摄时间、GPS 位置、拍摄设备、文件类型等多个维度自动分类整理文件。用户可以自定义分类规则和文件命名规则,软件会自动读取图片的 EXIF 元数据,构建目标路径和文件名,执行文件复制或移动操作。

文件去重

基于 MD5 哈希算法精确识别完全相同的文件,支持两阶段筛选机制:第一阶段按文件大小分组快速排除不重复的文件,第二阶段只对相同大小的文件计算 MD5.大幅减少计算量。使用线程池并发计算 MD5.支持缓存已计算的哈希值,提高处理效率。

EXIF 编辑

支持查看和修改图片的 EXIF 元数据信息,包括标题、作者、评分、相机品牌、型号、镜头信息等。软件内置了相机品牌型号数据库和镜头型号数据库,可以自动匹配镜头信息。支持 JPEG、PNG、WebP 等多种格式的 EXIF 读写,对于复杂格式使用 exiftool 作为备选方案。

地理编码

自动将 GPS 坐标转换为地址信息,使用高德地图 API 进行逆地理编码。软件会缓存地理编码结果,避免重复 API 调用,支持批量处理相同位置的文件,提高处理效率。

多格式支持

除了图片格式,还支持视频、音频、文档、压缩包等多种文件类型的管理和处理。

技术架构

开发环境

Python 3.11+

PyQt6 6.5.0+

Pillow 11.3.0+

opencv-python 4.8.0+

scikit-image 0.24.0+

numpy 1.24.0+

piexif 1.1.3+

exifread 3.0.0+

pillow-heif 0.16.0+

requests 2.31.0+

playwright 1.40.0+

架构设计

软件采用三层架构设计,包括用户界面层、业务逻辑层和数据处理层。用户界面层基于 PyQt6 构建现代化 GUI 界面,业务逻辑层处理核心业务逻辑和功能实现,数据处理层负责文件操作、元数据处理和配置管理。

核心模块

App.py: 应用程序入口,负责初始化 QApplication、创建主窗口实例、设置全局异常处理和单实例检测

main_window.py: 主窗口控制器,管理所有功能页面,处理窗口事件,管理系统托盘图标

add_folder.py: 文件夹管理页面,管理源文件夹和目标文件夹的选择,验证文件夹路径的有效性

smart_arrange.py: 智能整理业务逻辑管理器,管理智能整理的 UI 交互,收集用户配置

smart_arrange_thread.py: 智能整理工作线程,在独立线程中执行整理任务,避免阻塞 UI

write_exif.py: EXIF 编辑业务逻辑管理器,管理 EXIF 编辑的 UI 交互,收集用户配置

write_exif_thread.py: EXIF 写入工作线程,在独立线程中执行 EXIF 写入任务

file_deduplication.py: 文件去重业务逻辑管理器,管理文件去重的 UI 交互

file_deduplication_thread.py: 文件去重工作线程,扫描文件并计算 MD5.删除重复文件

common.py: 通用工具库,提供资源路径管理、文件类型检测、媒体类型检测、地理编码服务等功能

config_manager.py: 配置管理器,线程安全的配置读写操作,管理地理编码缓存和 API 调用限流

update_dialog.py: 更新检查对话框,检查 GitHub 上的最新版本

线程模型

软件使用 Qt 的信号槽机制进行线程通信,主线程处理所有 UI 交互和响应,工作线程执行耗时的文件操作任务。所有工作线程都继承自 QThread,支持随时停止操作,保持 UI 响应流畅。

GitHub地址:https://github.com/YangShengzhou03/LeafSort

声明:本站内容均收集于互联网,如不慎侵犯到您的版权利益,请附带相关证明文件来信本站将立即予以下架删除。