Initial commit: Python 图形编辑器 v1.0
This commit is contained in:
@@ -0,0 +1,343 @@
|
||||
# Python 绘图软件(图形编辑器)
|
||||
|
||||
一个功能强大的 Python 图形编辑器,类似简化版的 Photoshop,提供丰富的绘图和图像处理功能。
|
||||
|
||||
## ✨ 功能特性
|
||||
|
||||
### 🎨 绘图工具
|
||||
- **画笔工具** - 可调节大小和颜色的自由绘画
|
||||
- **铅笔工具** - 精细的像素级绘图
|
||||
- **橡皮擦** - 可调节大小的擦除工具
|
||||
- **直线工具** - 绘制直线段
|
||||
- **矩形工具** - 绘制矩形和正方形
|
||||
- **椭圆工具** - 绘制圆形和椭圆
|
||||
- **填充工具** - 智能区域填充(洪水填充算法)
|
||||
- **取色器** - 从图像中吸取颜色
|
||||
|
||||
### 🖼️ 图层管理
|
||||
- 创建/删除图层
|
||||
- 图层可见性控制
|
||||
- 图层上下移动
|
||||
- 图层选择
|
||||
- 透明图层支持
|
||||
|
||||
### 🌈 滤镜效果
|
||||
- **高斯模糊** - 柔和模糊效果
|
||||
- **锐化** - 增强图像细节
|
||||
- **边缘检测** - 提取图像轮廓
|
||||
- **浮雕** - 3D 浮雕效果
|
||||
|
||||
### 🎛️ 图像调整
|
||||
- **亮度调整** - 增强/减弱亮度
|
||||
- **对比度调整** - 调整对比度
|
||||
- **饱和度调整** - 调整色彩饱和度
|
||||
|
||||
### 📁 文件操作
|
||||
- 新建画布
|
||||
- 打开图像文件(支持 PNG、JPG、BMP、GIF)
|
||||
- 保存为多种格式
|
||||
- 导出功能
|
||||
- 撤销/重做(最多 20 步)
|
||||
|
||||
### 🎯 其他功能
|
||||
- 自定义画笔大小(1-100)
|
||||
- 颜色选择器
|
||||
- 实时状态显示
|
||||
- 800x600 画布尺寸
|
||||
|
||||
## 📦 安装依赖
|
||||
|
||||
```bash
|
||||
pip install -r requirements_draw.txt
|
||||
```
|
||||
|
||||
主要依赖:
|
||||
- **Pillow** - 图像处理
|
||||
- **numpy** - 数值计算(用于填充算法)
|
||||
- **tkinter** - GUI 界面(Python 自带)
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 方法 1:运行主程序
|
||||
```bash
|
||||
python draw_app.py
|
||||
```
|
||||
|
||||
### 方法 2:直接运行编辑器
|
||||
```bash
|
||||
python graphic_editor.py
|
||||
```
|
||||
|
||||
## 📖 使用指南
|
||||
|
||||
### 基本绘图流程
|
||||
|
||||
1. **选择工具**
|
||||
- 点击左侧工具栏选择需要的工具
|
||||
- 画笔/铅笔用于自由绘画
|
||||
- 形状工具用于绘制几何图形
|
||||
|
||||
2. **设置颜色**
|
||||
- 点击颜色框打开颜色选择器
|
||||
- 或使用取色器从画布取色
|
||||
|
||||
3. **调整画笔大小**
|
||||
- 拖动滑块调整画笔大小
|
||||
- 实时显示当前大小数值
|
||||
|
||||
4. **开始绘画**
|
||||
- 在画布上按住鼠标左键并拖动
|
||||
- 绘制形状时释放鼠标完成绘制
|
||||
|
||||
### 图层操作
|
||||
|
||||
1. **创建新图层**
|
||||
- 点击右侧图层面板的 "+" 按钮
|
||||
- 新图层将出现在图层列表顶部
|
||||
|
||||
2. **选择图层**
|
||||
- 点击图层列表中的图层名称
|
||||
- 当前选中图层前有 ▶️ 标记
|
||||
|
||||
3. **显示/隐藏图层**
|
||||
- 点击 👁️ 按钮切换可见性
|
||||
- 隐藏的图层显示为 ❌
|
||||
|
||||
4. **调整图层顺序**
|
||||
- 使用 ⬆️ 和 ⬇️ 按钮上下移动
|
||||
- 上层图层会遮挡下层
|
||||
|
||||
5. **删除图层**
|
||||
- 选择图层后点击 "-" 按钮
|
||||
- 至少保留一个图层
|
||||
|
||||
### 应用滤镜
|
||||
|
||||
1. 选择要处理的图层
|
||||
2. 在右侧滤镜面板选择滤镜
|
||||
3. 滤镜会立即应用到当前图像
|
||||
4. 可使用撤销功能恢复
|
||||
|
||||
### 图像调整
|
||||
|
||||
1. 选择要调整的图层
|
||||
2. 在调整面板选择调整类型
|
||||
3. 每次点击会增强效果(1.2 倍)
|
||||
4. 可多次点击累加效果
|
||||
|
||||
### 撤销和重做
|
||||
|
||||
- **撤销** - 点击 "↩️ 撤销" 按钮
|
||||
- **重做** - 点击 "↪️ 重做" 按钮
|
||||
- 最多支持 20 步历史记录
|
||||
|
||||
## 💡 使用技巧
|
||||
|
||||
### 1. 精确绘图
|
||||
- 使用铅笔工具进行像素级精确绘图
|
||||
- 放大图像可获得更好的控制
|
||||
|
||||
### 2. 颜色搭配
|
||||
- 使用取色器快速匹配颜色
|
||||
- 常用颜色可以记录下来重复使用
|
||||
|
||||
### 3. 图层策略
|
||||
- 背景放在最底层
|
||||
- 主要元素放在中间层
|
||||
- 细节和特效放在顶层
|
||||
- 不同元素使用不同图层便于修改
|
||||
|
||||
### 4. 填充技巧
|
||||
- 填充区域需要是封闭的
|
||||
- 颜色差异过大会影响填充效果
|
||||
- 可先用画笔勾勒轮廓再填充
|
||||
|
||||
### 5. 滤镜使用
|
||||
- 轻微模糊可以平滑图像
|
||||
- 锐化适合处理模糊的照片
|
||||
- 边缘检测可用于提取线稿
|
||||
- 滤镜效果可以叠加使用
|
||||
|
||||
## 🔧 技术架构
|
||||
|
||||
### 核心类
|
||||
|
||||
- **GraphicEditor** - 主编辑器类
|
||||
- 管理所有 UI 组件
|
||||
- 处理用户输入
|
||||
- 协调各模块工作
|
||||
|
||||
- **Layer** - 图层数据类
|
||||
- 存储图层图像数据
|
||||
- 管理可见性和透明度
|
||||
- 图层 ID 和名称
|
||||
|
||||
- **ToolType** - 工具枚举
|
||||
- 定义所有可用工具
|
||||
- 工具类型标识
|
||||
|
||||
### 关键技术
|
||||
|
||||
1. **Tkinter GUI**
|
||||
- 跨平台 GUI 框架
|
||||
- 事件驱动编程
|
||||
- 画布组件绘图
|
||||
|
||||
2. **Pillow 图像处理**
|
||||
- 图像创建和保存
|
||||
- 滤镜应用
|
||||
- 图像增强
|
||||
|
||||
3. **NumPy 数组操作**
|
||||
- 像素级图像处理
|
||||
- 洪水填充算法
|
||||
- 颜色计算
|
||||
|
||||
4. **洪水填充算法**
|
||||
- BFS(广度优先搜索)实现
|
||||
- 颜色容差处理
|
||||
- 性能优化
|
||||
|
||||
## 📊 性能说明
|
||||
|
||||
### 画布尺寸
|
||||
- 默认:800x600 像素
|
||||
- 可根据需要修改
|
||||
|
||||
### 内存占用
|
||||
- 空画布:约 2MB
|
||||
- 复杂图像:10-20MB
|
||||
- 图层数量:建议不超过 20 个
|
||||
|
||||
### 响应性
|
||||
- 画笔绘制:实时响应
|
||||
- 滤镜应用:1-3 秒
|
||||
- 文件保存:1-2 秒
|
||||
|
||||
## 🐛 已知限制
|
||||
|
||||
1. 不支持图层混合模式
|
||||
2. 不支持文字工具(已预留接口)
|
||||
3. 不支持选区工具
|
||||
4. 不支持变换(缩放、旋转)
|
||||
5. 滤镜效果不可调节参数
|
||||
|
||||
## 🚀 未来扩展
|
||||
|
||||
### 计划功能
|
||||
- [ ] 文字工具
|
||||
- [ ] 选区工具
|
||||
- [ ] 图层混合模式
|
||||
- [ ] 图像变换(缩放、旋转、裁剪)
|
||||
- [ ] 可调节参数的滤镜
|
||||
- [ ] 自定义画布尺寸
|
||||
- [ ] 渐变填充
|
||||
- [ ] 图案填充
|
||||
- [ ] 画笔形状自定义
|
||||
- [ ] 压力感应支持
|
||||
|
||||
### 性能优化
|
||||
- [ ] 多线程处理
|
||||
- [ ] GPU 加速
|
||||
- [ ] 图像分块处理
|
||||
- [ ] 内存优化
|
||||
|
||||
## 📝 示例项目
|
||||
|
||||
### 示例 1:简单绘图
|
||||
```python
|
||||
# 运行程序
|
||||
python draw_app.py
|
||||
|
||||
# 1. 选择画笔工具
|
||||
# 2. 选择颜色
|
||||
# 3. 在画布上绘画
|
||||
# 4. 保存为 PNG
|
||||
```
|
||||
|
||||
### 示例 2:多层绘图
|
||||
```python
|
||||
# 1. 在背景层绘制底色
|
||||
# 2. 新建图层绘制主体
|
||||
# 3. 再新建图层添加细节
|
||||
# 4. 调整图层顺序
|
||||
# 5. 合并导出
|
||||
```
|
||||
|
||||
### 示例 3:应用滤镜
|
||||
```python
|
||||
# 1. 打开图片
|
||||
# 2. 应用高斯模糊
|
||||
# 3. 应用边缘检测
|
||||
# 4. 调整对比度
|
||||
# 5. 保存结果
|
||||
```
|
||||
|
||||
## 🎓 学习资源
|
||||
|
||||
### Tkinter 文档
|
||||
- 官方文档:https://docs.python.org/3/library/tkinter.html
|
||||
- Tkinter 教程:https://www.pythontutorial.net/tkinter/
|
||||
|
||||
### Pillow 文档
|
||||
- 官方文档:https://pillow.readthedocs.io/
|
||||
- 图像处理教程:https://pillow.readthedocs.io/en/stable/handbook/tutorial.html
|
||||
|
||||
### NumPy 文档
|
||||
- 官方文档:https://numpy.org/doc/
|
||||
- 数组操作指南:https://numpy.org/doc/stable/user/absolute_beginners.html
|
||||
|
||||
## 🤝 贡献
|
||||
|
||||
欢迎提交问题和功能建议!
|
||||
|
||||
## 📄 许可证
|
||||
|
||||
MIT License
|
||||
|
||||
## 📧 联系方式
|
||||
|
||||
如有问题,请通过 Gitea 仓库提交 issue。
|
||||
|
||||
## 🖼️ 界面预览
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ Python 图形编辑器 │
|
||||
├──────────┬──────────────────────────┬──────────────────┤
|
||||
│ 工具 │ │ 图层 │
|
||||
│ 🖌️ 画笔 │ │ ▶️👁️ 图层 1 │
|
||||
│ ✏️ 铅笔 │ 画布区域 │ 👁️ 背景 │
|
||||
│ 🧹 橡皮 │ (800x600) │ │
|
||||
│ 📏 直线 │ │ + - 👁️ ⬆️ ⬇️ │
|
||||
│ ⬜ 矩形 │ ├──────────────────┤
|
||||
│ ⭕ 椭圆 │ │ 滤镜 │
|
||||
│ 🪣 填充 │ │ 🌫️ 高斯模糊 │
|
||||
│ 💉 取色 │ │ 🔍 锐化 │
|
||||
├──────────┤ │ 🌓 边缘检测 │
|
||||
│ 颜色 │ │ 🎨 浮雕 │
|
||||
│ [颜色框] │ ├──────────────────┤
|
||||
│ 大小 │ │ 图像调整 │
|
||||
│ [滑块] │ │ ☀️ 亮度 │
|
||||
├──────────┤ │ 🎭 对比度 │
|
||||
│ 操作 │ │ 🎨 饱和度 │
|
||||
│ ↩️ 撤销 │ ├──────────────────┤
|
||||
│ ↪️ 重做 │ │ 文件 │
|
||||
│ 🗑️ 清除 │ │ 📂 新建 │
|
||||
└──────────┴──────────────────────────┤ 💾 保存 │
|
||||
│ 📤 导出 │
|
||||
┌─────────────────────────────────────┴──────────────────┤
|
||||
│ 状态栏:就绪 │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 🎯 总结
|
||||
|
||||
这是一个功能完善的 Python 图形编辑器,适合:
|
||||
- 学习图像处理原理
|
||||
- 快速原型设计
|
||||
- 简单图像编辑
|
||||
- 教学演示
|
||||
- 个人绘画
|
||||
|
||||
享受绘图的乐趣!🎨✨
|
||||
Reference in New Issue
Block a user