项目初始化 - 创建完整项目结构(src/, data/, docs/, examples/, tests/) - 配置requirements.txt依赖 - 创建.gitignore P0基础框架 - 数据库模型:Record模型,6种分类类型 - 配置管理:YAML配置,支持AI/OCR/云存储/UI配置 - OCR模块:PaddleOCR本地识别,支持云端扩展 - AI模块:支持OpenAI/Claude/通义/Ollama,6种分类 - 存储模块:完整CRUD,搜索,统计,导入导出 - 主窗口框架:侧边栏导航,米白配色方案 - 图片处理:截图/剪贴板/文件选择/图片预览 - 处理流程整合:OCR→AI→存储串联,Markdown展示,剪贴板复制 - 分类浏览:卡片网格展示,分类筛选,搜索,详情查看 技术栈 - PyQt6 + SQLAlchemy + PaddleOCR + OpenAI/Claude SDK - 共47个Python文件,4000+行代码 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
6.3 KiB
P0-7 图片处理功能实现报告
概述
本文档记录了 CutThenThink 项目 P0-7 阶段的图片处理功能实现。
实现的功能
1. 全局快捷键截图功能
文件: /home/congsh/CodeSpace/ClaudeSpace/CutThenThink/src/gui/widgets/screenshot_widget.py
核心类:
ScreenshotOverlay- 全屏截图覆盖窗口ScreenshotWidget- 截图管理组件QuickScreenshotHelper- 快速截图助手
功能特性:
- 全屏透明覆盖窗口,支持区域选择
- 鼠标拖动选择截图区域
- 实时显示选区尺寸
- ESC 键取消,Enter 键确认
- 自动保存截图到临时目录
- 快捷键支持:
Ctrl+Shift+A
使用方式:
from src.gui.widgets import ScreenshotWidget, take_screenshot
# 方式 1: 使用组件
widget = ScreenshotWidget()
widget.take_screenshot()
# 方式 2: 使用便捷函数
take_screenshot()
2. 剪贴板监听功能
文件: /home/congsh/CodeSpace/ClaudeSpace/CutThenThink/src/gui/widgets/clipboard_monitor.py
核心类:
ClipboardMonitor- 剪贴板监听器ClipboardImagePicker- 剪贴板图片选择器
功能特性:
- 实时监听剪贴板变化
- 自动检测图片内容
- 避免重复触发(图片对比)
- 自动保存剪贴板图片到临时目录
- 支持启用/禁用监听
- 信号通知机制
使用方式:
from src.gui.widgets import ClipboardMonitor
from PyQt6.QtCore import QObject
# 创建监听器
monitor = ClipboardMonitor(parent)
# 连接信号
monitor.image_detected.connect(lambda path: print(f"检测到图片: {path}"))
# 控制监听
monitor.set_enabled(True) # 启用
monitor.set_enabled(False) # 禁用
3. 图片文件选择功能
文件: /home/congsh/CodeSpace/ClaudeSpace/CutThenThink/src/gui/widgets/image_picker.py
核心类:
ImagePicker- 图片选择器组件DropArea- 拖放区域ImagePreviewLabel- 图片预览标签QuickImagePicker- 快速图片选择助手
功能特性:
- 文件对话框选择图片
- 拖放文件到组件
- 支持单选/多选模式
- 自动过滤有效图片格式
- 图片预览功能
- 支持的格式:PNG, JPG, JPEG, BMP, GIF, WebP, TIFF
使用方式:
from src.gui.widgets import ImagePicker
# 创建单选图片选择器
picker = ImagePicker(multiple=False)
picker.image_selected.connect(lambda path: print(f"选择: {path}"))
# 创建多选图片选择器
multi_picker = ImagePicker(multiple=True)
multi_picker.images_selected.connect(lambda paths: print(f"选择: {paths}"))
4. 图片预览组件
文件: /home/congsh/CodeSpace/ClaudeSpace/CutThenThink/src/gui/widgets/image_preview_widget.py
核心类:
ImagePreviewWidget- 图片预览组件ImageLabel- 可拖动的图片标签
功能特性:
- 缩放功能(放大、缩小、适应窗口、实际大小)
- 缩放滑块控制(10% - 1000%)
- 旋转功能(左旋、右旋 90度)
- 鼠标拖动平移
- 全屏查看(F11)
- 键盘快捷键支持:
Ctrl++- 放大Ctrl+-- 缩小Ctrl+F- 适应窗口Ctrl+0- 实际大小Ctrl+L- 向左旋转Ctrl+R- 向右旋转F11- 全屏切换
使用方式:
from src.gui.widgets import ImagePreviewWidget
# 创建预览组件
preview = ImagePreviewWidget()
# 加载图片
preview.load_image("/path/to/image.png")
# 或加载 QPixmap 对象
from PyQt6.QtGui import QPixmap
pixmap = QPixmap("/path/to/image.png")
preview.load_pixmap(pixmap)
主窗口集成
文件: /home/congsh/CodeSpace/ClaudeSpace/CutThenThink/src/gui/main_window.py
新增功能:
- 截图处理页面新增三个操作按钮
- 📷 新建截图
- 📂 导入图片
- 📋 粘贴剪贴板图片
- 集成图片预览组件
- 全局快捷键绑定
- 剪贴板监听器集成
快捷键:
Ctrl+Shift+A- 触发截图Ctrl+Shift+V- 粘贴剪贴板图片Ctrl+Shift+O- 导入图片
组件导出
文件: /home/congsh/CodeSpace/ClaudeSpace/CutThenThink/src/gui/widgets/__init__.py
所有新组件已导出,可直接导入使用:
from src.gui.widgets import (
# 截图相关
ScreenshotWidget,
ScreenshotOverlay,
QuickScreenshotHelper,
take_screenshot,
# 剪贴板相关
ClipboardMonitor,
ClipboardImagePicker,
# 图片选择相关
ImagePicker,
DropArea,
QuickImagePicker,
# 图片预览相关
ImagePreviewWidget,
ZoomMode,
ImageLabel,
)
测试
测试脚本: /home/congsh/CodeSpace/ClaudeSpace/CutThenThink/examples/test_image_features.py
运行测试:
cd /home/congsh/CodeSpace/ClaudeSpace/CutThenThink
python3 examples/test_image_features.py
临时文件存储
所有临时图片保存在系统临时目录:
- 截图:
/tmp/cutthenthink/screenshots/ - 剪贴板:
/tmp/cutthenthink/clipboard/
文件清单
新增文件
/src/gui/widgets/screenshot_widget.py- 截图组件/src/gui/widgets/clipboard_monitor.py- 剪贴板监听组件/src/gui/widgets/image_picker.py- 图片选择组件/src/gui/widgets/image_preview_widget.py- 图片预览组件/examples/test_image_features.py- 测试脚本
修改文件
/src/gui/widgets/__init__.py- 添加新组件导出/src/gui/main_window.py- 集成图片处理功能
技术栈
- GUI 框架: PyQt6
- 图片处理: QPixmap, QImage, QPainter
- 信号槽: PyQt6 信号槽机制
- 快捷键: QShortcut, QKeySequence
依赖项
项目依赖(requirements.txt):
PyQt6==6.6.1
PyQt6-WebEngine==6.6.0
...
后续工作
建议在后续阶段实现:
- 图片编辑功能(裁剪、标注、滤镜)
- OCR 识别集成
- AI 分析功能
- 云存储上传
- 图片分类和标签管理
测试说明
手动测试步骤:
- 启动应用程序
- 点击「新建截图」测试截图功能
- 复制图片后点击「粘贴剪贴板图片」
- 点击「导入图片」选择本地文件
- 在预览区域测试缩放、旋转、平移等功能
- 测试快捷键是否正常工作
总结
P0-7 阶段成功实现了完整的图片处理功能模块,包括截图、剪贴板监听、文件选择和图片预览四大核心功能。所有组件均已集成到主窗口,并提供了快捷键支持,为后续的 OCR 和 AI 分析功能打下了基础。