Skip to content

Latest commit

 

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Semi-Utils - PyQt5 GUI版本 v2.6.0


项目背景

本项目是基于开源项目 semi-utils 迁移而来的PyQt5 GUI版本。原项目是一个命令行图片处理工具,主要用于为照片添加水印、阴影、白边等效果,支持多种布局和自定义设置。

原项目信息:


主要变更

1. 用户界面迁移

  • 从命令行迁移到图形界面:将原有的命令行交互模式完全替换为PyQt5图形用户界面
  • 单界面设计:左侧参数设置,右侧文件选择、处理控制与统计(v2.2 起合并原有三个标签页)
  • 实时配置预览:所有设置更改实时生效,无需手动保存

2. 功能增强

  • 多线程处理:图片处理在后台线程进行,界面保持响应
  • 进度显示:实时显示处理进度和状态信息
  • 错误处理:完善的错误提示和日志记录机制
  • 文件选择:图形化的目录选择对话框

3. 代码重构

  • 模块化结构:将核心功能模块迁移到core/entity和core/enums目录
  • 配置管理:统一的配置管理系统
  • 处理器链:灵活的图片处理器链设计

系统要求

  • 操作系统:Windows 7/8/10/11
  • Python版本:Python 3.10+
  • 依赖包:详见requirements.txt

安装说明

1. 安装Python依赖

pip install -r requirements.txt

2. (可选)安装 exiftool

程序内置基于 Pillow 的 EXIF 读取,不安装也能正常显示相机型号、拍摄参数、日期等信息。 程序启动时会自动检测,若未检测到 exiftool 会询问是否自动下载(仅 Windows)。 部分单反(如 Nikon D810)将 ISO 和镜头信息存放在 Makernotes 中,若需完整读取这些字段,可从exiftool官网下载:

  • 将解压后的exiftool(-k).exe文件复制到项目根目录下
  • 将"exiftool(-k).exe"重命名为"exiftool.exe"

3. 运行程序

python main.py

注意事项

  • 需要 Python 3.10+ 版本(代码使用了 dict | None 等新语法)
  • 如遇到QFluentWidgets安装问题,可以尝试:pip install PyQt-Fluent-Widgets
  • 确保系统已安装Microsoft Visual C++ Redistributable

下载 exe 版本

在 Releases 页面下载 Copyleft-<版本>-windows-x64.zip,解压后双击 Copyleft.exe 即可运行,无需安装 Python。首次启动会自动在 exe 同目录释放配置、字体和相机 Logo;exiftool 会在需要时自动下载。

自动发布

推送 v* 格式的 tag 即可自动构建并发布 Release(见 .github/workflows/release.yml):

git tag v2.6.0
git push origin v2.6.0

GitHub Actions 会在 windows-latest 上用 PyInstaller 打包,产物 Copyleft-<tag>-windows-x64.zip 自动附到 Release。也可以在仓库的 Actions 页面手动触发(workflow_dispatch)做测试构建(不发布)。

使用说明

程序为单界面设计:左侧为设置面板,右侧为处理面板。

布局设置

  • 布局类型:选择图片处理布局(水印、正方形、背景模糊等)
  • Logo启用:控制是否在图片上添加Logo

文字位置设置

  • 四个角落文字:分别设置左上、右上、左下、右下角的文字内容
  • 支持的文字类型:相机型号、镜头信息、拍摄参数、日期时间、自定义文字等
  • 自定义文字:当下方某处文字选择"自定义"时,显示在此输入框中填写的内容

高级设置

  • 阴影效果:为图片添加阴影效果
  • 白边效果:为图片添加白色边框
  • 按比例填充:保持原始图片比例进行填充
  • 等效焦距:使用等效焦距信息
  • 图片质量:设置输出图片的质量(1-100)

文件选择

  • 输入目录:选择包含待处理图片的目录
  • 输出目录:选择处理后的图片保存目录

处理控制

  • 开始处理:启动图片处理流程
  • 停止:停止处理(已在处理中的图片会处理完)
  • 进度显示:实时显示处理进度

处理统计

  • 实时显示排队数、正在处理数、已处理数和每秒处理数

功能特性

支持的布局类型

  1. 水印布局:带Logo的水印布局
  2. 正方形布局:正方形裁剪布局
  3. 简单布局:基本处理布局
  4. 背景模糊:背景模糊效果
  5. 纯白边框:纯白色边框布局

文字位置选项

  • 相机型号
  • 相机品牌
  • 镜头信息
  • 拍摄参数
  • 日期时间
  • 自定义文字
  • 地理位置信息
  • 文件名
  • 无文字

处理效果

  • 阴影效果:为图片添加逼真的阴影
  • 白边效果:添加白色边框增强视觉效果
  • 比例保持:保持原始图片比例
  • 高质量输出:可调节的输出质量

注意事项

1. 输入图片要求

  • 支持常见的图片格式(JPG、PNG等)
  • 建议使用高质量原始图片
  • 处理前请备份重要图片

2. 输出目录

  • 输出目录会自动创建
  • 处理后的图片会保持原文件名
  • 建议使用空目录作为输出目录

3. 性能考虑

  • 大量图片处理可能需要较长时间
  • 建议分批处理大量图片
  • 处理过程中不要关闭程序

4. 错误处理

  • 处理失败的文件会在日志中显示错误信息
  • 单个文件处理失败不会影响其他文件
  • 建议检查错误日志进行问题排查

已知问题和解决方案

1. Qt相关错误

问题:ImportError: DLL load failed 解决方案:安装Microsoft Visual C++ Redistributable

2. 字体显示问题

问题:界面字体过小 解决方案:程序已优化字体大小,如仍有问题可手动调整配置文件中的font_size和bold_font_size值

3. UI界面简化

问题:多标签页操作复杂 解决方案:v2.2版本已合并为一个界面,左侧设置,右侧处理,操作更直观

4. 日志显示问题

问题:日志区域占用空间,信息不直观 解决方案:v2.2版本已删除日志显示,改为错误弹窗提示,界面更简洁


技术架构

核心模块

  • core/entity:实体类定义(图片容器、处理器链等)
  • core/enums:枚举常量定义
  • main.py:PyQt5主窗口界面与处理线程
  • utils:工具函数

处理器链设计

采用责任链模式,支持灵活添加各种图片处理器:

  • 阴影处理器
  • 水印处理器
  • 白边处理器
  • 比例填充处理器

多线程处理

使用QThread实现后台图片处理,确保界面响应性。

开发说明

项目结构

Copyleft/
├── core/                 # 核心模块
│   ├── entity/          # 实体类(图片容器、处理器链、配置管理等)
│   └── enums/           # 枚举常量
├── fonts/               # 字体资源文件
├── logos/               # Logo图片资源
├── assets/              # 界面用图片资源(打赏二维码等)
├── config.yaml          # 主配置文件
├── main.py              # 程序入口点(整合了PyQt5主窗口界面)
├── init.py              # 初始化配置、布局与处理器注册
├── utils.py             # 工具函数库
└── requirements.txt     # Python依赖包列表

扩展开发

  • 添加新的布局类型:在init.py中定义新的LayoutItem
  • 添加新的处理器:继承ImageProcessor基类
  • 修改界面:编辑main.py中的MainWindow类

许可证

本项目基于Apache 2.0 License开源协议发布。

联系方式

原项目作者

本项目作者


支持与打赏

如果这个项目对你有帮助,欢迎通过给我们买杯咖啡支持我们的工作!

作者打赏二维码

以及原作者: 原作者打赏二维码

其他支持方式

  • ⭐ Star 这个项目
  • 📝 提交 Issue 或 Pull Request
  • 📢 分享给更多有需要的人

感谢您的支持!

更新日志

v2.6.0 更新日志

  • EXIF 读取双通道:优先 exiftool(可读取 Makernotes 中的 ISO、镜头信息),缺失或失败时自动回退 Pillow 解析,不再强依赖 exiftool
  • 启动时检测 exiftool,缺失时询问并自动下载安装
  • 拍摄方向自动摆正(EXIF Orientation),竖拍照片输出不再横竖颠倒
  • 拍摄时间缺失时回退为文件修改时间
  • 修复浏览按钮因缺少配置方法而崩溃的问题;修复空 Logo id 误匹配所有厂商的问题
  • 新增停止处理按钮;单张图片失败不再中断整体流程,错误统一弹窗汇总
  • 支持打包为单文件 exe,新增 GitHub Actions 自动发布:推送 v* 标签即自动构建并发布 Release

v2.5 更新日志

  • 优化界面布局和用户体验,改进设置项的组织结构
  • 增强配置管理功能,支持更多自定义选项
  • 修复已知bug,提升程序稳定性和性能
  • 改进错误处理机制,提供更详细的错误信息

v2.4 更新日志

  • 添加并行处理功能:支持同时处理最多5张图片,大大提高了程序运行效率
  • 优化资源利用率:使用线程池管理工作线程,充分利用系统资源
  • 改进错误处理机制:单个图片处理失败不会影响整体处理流程

v2.3 更新日志

  • 添加进度显示功能,包括进度条和详细统计信息
  • 在处理界面右下角新增处理统计区域
  • 显示内容包括:排队数、正在处理数、已处理数和每秒处理数

v2.2 更新日志

  • 简化UI界面,合并三个标签页为一个
  • 删除日志显示,改为错误弹窗提示
  • 优化界面布局,左侧设置,右侧处理
  • 提升用户体验和操作效率

v2.1

  • 修复布局切换和文字位置设置的bug
  • 优化字体大小显示效果
  • 改进配置管理系统
  • 增强错误处理和稳定性

v2.0

  • 完成PyQt5 GUI迁移
  • 实现图形化用户界面
  • 添加多线程处理支持
  • 完善错误处理机制

v1.x (原命令行版本)

  • 命令行交互模式
  • 基本图片处理功能
  • 配置管理系统

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages