Skip to content

Piggywu981/Copyleft

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Semi-Utils - PyQt5 GUI版本 v2.5


项目背景

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

原项目信息:


主要变更

1. 用户界面迁移

  • 从命令行迁移到图形界面:将原有的命令行交互模式完全替换为PyQt5图形用户界面
  • 标签页设计:采用三标签页设计(基本设置、高级设置、图片处理)提供更直观的操作体验
  • 实时配置预览:所有设置更改实时生效,无需手动保存

2. 功能增强

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

3. 代码重构

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

系统要求

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

安装说明

1. 安装Python依赖

pip install -r requirements.txt

2. (重要)下载并解压exiftool

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

3. 运行程序

python main.py

注意事项

  • 建议使用Python 3.8+版本
  • 如遇到QFluentWidgets安装问题,可以尝试:pip install PyQt-Fluent-Widgets
  • 确保系统已安装Microsoft Visual C++ Redistributable

使用说明

基本设置标签页

布局设置

  • 布局类型:选择图片处理布局(水印、正方形、背景模糊等)
  • 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_sizebold_font_size

3. UI界面简化

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

4. 日志显示问题

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


技术架构

核心模块

  • core/entity:实体类定义(图片容器、处理器链等)
  • core/enums:枚举常量定义
  • ui:PyQt5用户界面
  • utils:工具函数

处理器链设计

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

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

多线程处理

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

开发说明

项目结构

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

扩展开发

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

许可证

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

联系方式

原项目作者

本项目作者


支持与打赏

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

core\enums\IMG_7190.JPG

以及原作者: core\enums\wechat.jpg

其他支持方式

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

感谢您的支持!

更新日志

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

License

Stars

Watchers

Forks

Packages

No packages published

Languages