Files
drawing-app/README.md
T

344 lines
9.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 图形编辑器,适合:
- 学习图像处理原理
- 快速原型设计
- 简单图像编辑
- 教学演示
- 个人绘画
享受绘图的乐趣!🎨✨