# LX_Multi_Capture
**Repository Path**: ikaros-521/LX_Multi_Capture
## Basic Information
- **Project Name**: LX_Multi_Capture
- **Description**: 洛曦 多选区截图器
- **Primary Language**: Python
- **License**: GPL-3.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-12-12
- **Last Updated**: 2025-12-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ✨ 洛曦 多选区截图器 ✨
[![][python]][python]
[![][github-release-shield]][github-release-link]
[![][github-stars-shield]][github-stars-link]
[![][github-forks-shield]][github-forks-link]
[![][github-issues-shield]][github-issues-link]
[![][github-contributors-shield]][github-contributors-link]
[![][github-license-shield]][github-license-link]
# LX Multi Capture - 多选区截图工具
一个基于 BS 架构(浏览器前端 + Python FastAPI 后端)的多选区截图工具,支持 Windows 和 Linux 系统。
## ✨ 功能特性
1. **选区管理**
- 创建多个命名矩形选区(如 "price", "title")
- 每个选区包含名称、左上角 (x1,y1)、右下角 (x2,y2)
- 支持增删改查和预览(显示缩略图)
2. **交互式选区设置**
- 通过自定义热键采集坐标
- 热键 A(默认 Ctrl+Alt+1):记录左上角坐标
- 热键 B(默认 Ctrl+Alt+2):记录右下角坐标
- 自动显示实时截图预览和坐标确认
3. **截图执行**
- 支持手动触发(Web 按钮 + 自定义全局热键 C)
- 支持定时截图(用户设置间隔,单位秒)
- 截图保存为 `{name}_{timestamp}.png`
4. **配置管理**
- 输出目录路径(绝对路径)
- 热键 A/B/C 自定义
- 定时截图间隔设置
## 🛠️ 技术栈
- **前端**: React + TailwindCSS + Vite
- **后端**: Python + FastAPI
- **截图**: mss
- **热键监听**: pynput / keyboard (Windows)
- **配置持久化**: JSON 文件
## 📋 环境要求
- Python 3.10+
- Node.js 16+ (用于前端开发)
- Windows 或 Linux 系统
## 🚀 安装步骤
### 1. 克隆项目
```bash
git clone
cd LX_Multi_Capture
```
### 2. 安装后端依赖
```bash
pip install -r requirements.txt
```
### 3. 安装前端依赖
```bash
cd frontend
npm install
cd ..
```
## 🎯 运行方式
### 开发模式
#### 方式一:分别启动前后端(推荐开发时使用)
**终端 1 - 启动后端:**
```bash
python -m backend.main
```
**终端 2 - 启动前端开发服务器:**
```bash
cd frontend
npm run dev
```
然后访问 `http://localhost:5173`(前端开发服务器会自动代理 API 请求到后端)
#### 方式二:生产模式(前端构建后)
**1. 构建前端:**
```bash
cd frontend
npm run build
cd ..
```
**2. 启动后端(会自动服务前端静态文件):**
```bash
python -m backend.main
```
然后访问 `http://localhost:8021`
### 生产模式
```bash
# 构建前端
cd frontend
npm run build
cd ..
# 启动后端
python -m backend.main
```
访问 `http://localhost:8021`
## 📖 使用说明
### 1. 创建选区
#### 方法一:手动输入坐标
1. 点击"创建选区"按钮
2. 输入选区名称和坐标(x1, y1, x2, y2)
3. 点击"保存"
#### 方法二:交互式设置(使用热键)
1. 点击"创建选区" → "交互式设置(使用热键)"
2. 将鼠标移到目标区域左上角,按下 **Ctrl+Alt+1**(或配置的热键A)
3. 将鼠标移到目标区域右下角,按下 **Ctrl+Alt+2**(或配置的热键B)
4. 系统会自动显示预览图和坐标,确认后输入名称并保存
### 2. 截图
#### 手动截图
- 点击"截取所有选区"按钮
- 或使用热键 **Ctrl+Alt+S**(或配置的热键C)
#### 定时截图
1. 点击"配置"按钮
2. 设置"定时截图间隔"(秒),0 表示关闭
3. 保存配置后,系统会自动按间隔截图所有选区
### 3. 配置设置
点击"配置"按钮可以设置:
- **输出目录**:截图保存路径(绝对路径)
- **热键 A**:记录左上角坐标(默认:ctrl+alt+1)
- **热键 B**:记录右下角坐标(默认:ctrl+alt+2)
- **热键 C**:手动截图(默认:ctrl+alt+s)
- **定时截图间隔**:自动截图间隔(秒),0 表示关闭
## 📁 项目结构
```
LX_Multi_Capture/
├── backend/ # 后端代码
│ ├── main.py # FastAPI 主应用
│ ├── models.py # 数据模型
│ ├── routes/ # API 路由
│ │ ├── regions.py # 选区管理
│ │ ├── config.py # 配置管理
│ │ ├── screenshot.py # 截图功能
│ │ └── mouse.py # 鼠标位置
│ └── services/ # 业务服务
│ ├── region_service.py
│ ├── screenshot_service.py
│ ├── hotkey_service.py
│ └── config_service.py
├── frontend/ # 前端代码
│ ├── src/
│ │ ├── App.jsx # 主应用组件
│ │ ├── components/ # React 组件
│ │ └── services/ # API 服务
│ ├── package.json
│ └── vite.config.js
├── requirements.txt # Python 依赖
├── config.json # 配置文件(自动生成)
├── regions.json # 选区数据(自动生成)
└── screenshots/ # 截图输出目录(自动创建)
```
## 🔧 API 文档
启动后端后,访问 `http://localhost:8021/docs` 查看完整的 API 文档(FastAPI 自动生成)。
主要 API 端点:
- `GET /api/regions` - 获取所有选区
- `POST /api/regions` - 创建选区
- `PUT /api/regions/{id}` - 更新选区
- `DELETE /api/regions/{id}` - 删除选区
- `GET /api/config` - 获取配置
- `PUT /api/config` - 更新配置
- `POST /api/screenshot/all` - 截取所有选区
- `POST /api/screenshot/{id}` - 截取指定选区
## ⚠️ 注意事项
1. **热键权限**:在某些系统上,全局热键可能需要管理员权限
2. **坐标规范化**:系统会自动处理 x1>x2 或 y1>y2 的情况,确保坐标正确
3. **输出目录**:请确保输出目录有写权限,系统会自动创建不存在的目录
4. **热键冲突**:避免与其他应用程序的热键冲突
## 🐛 故障排除
### 热键不工作
- 检查是否有其他程序占用相同热键
- 在 Windows 上,尝试以管理员权限运行
- 在 Linux 上,确保有必要的权限
### 截图失败
- 检查输出目录是否有写权限
- 确认选区坐标是否在屏幕范围内
- 查看后端控制台的错误信息
### 前端无法连接后端
- 确认后端是否在 `http://localhost:8021` 运行
- 检查 CORS 配置(开发模式下已允许所有来源)
## 📝 许可证
查看 [LICENSE](LICENSE) 文件
## 🤝 贡献
欢迎提交 Issue 和 Pull Request!
## ⭐️ Star 经历
[](https://star-history.com/#Ikaros-521/LX_Multi_Capture&Date)
## 贡献指南
欢迎提交Issue和Pull Request来改进项目。
## 许可证
GPL3.0 License
[python]: https://img.shields.io/badge/python-3.10+-blue.svg?labelColor=black
[back-to-top]: https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square
[github-action-release-link]: https://github.com/actions/workflows/Ikaros-521/LX_Multi_Capture/release.yml
[github-action-release-shield]: https://img.shields.io/github/actions/workflow/status/Ikaros-521/LX_Multi_Capture/release.yml?label=release&labelColor=black&logo=githubactions&logoColor=white&style=flat-square
[github-action-test-link]: https://github.com/actions/workflows/Ikaros-521/LX_Multi_Capture/test.yml
[github-action-test-shield]: https://img.shields.io/github/actions/workflow/status/Ikaros-521/LX_Multi_Capture/test.yml?label=test&labelColor=black&logo=githubactions&logoColor=white&style=flat-square
[github-codespace-link]: https://codespaces.new/Ikaros-521/LX_Multi_Capture
[github-codespace-shield]: https://github.com/codespaces/badge.svg
[github-contributors-link]: https://github.com/Ikaros-521/LX_Multi_Capture/graphs/contributors
[github-contributors-shield]: https://img.shields.io/github/contributors/Ikaros-521/LX_Multi_Capture?color=c4f042&labelColor=black&style=flat-square
[github-forks-link]: https://github.com/Ikaros-521/LX_Multi_Capture/network/members
[github-forks-shield]: https://img.shields.io/github/forks/Ikaros-521/LX_Multi_Capture?color=8ae8ff&labelColor=black&style=flat-square
[github-issues-link]: https://github.com/Ikaros-521/LX_Multi_Capture/issues
[github-issues-shield]: https://img.shields.io/github/issues/Ikaros-521/LX_Multi_Capture?color=ff80eb&labelColor=black&style=flat-square
[github-license-link]: https://github.com/Ikaros-521/LX_Multi_Capture/blob/main/LICENSE
[github-license-shield]: https://img.shields.io/github/license/Ikaros-521/LX_Multi_Capture?color=white&labelColor=black&style=flat-square
[github-release-link]: https://github.com/Ikaros-521/LX_Multi_Capture/releases
[github-release-shield]: https://img.shields.io/github/v/release/Ikaros-521/LX_Multi_Capture?color=369eff&labelColor=black&logo=github&style=flat-square
[github-releasedate-link]: https://github.com/Ikaros-521/LX_Multi_Capture/releases
[github-releasedate-shield]: https://img.shields.io/github/release-date/Ikaros-521/LX_Multi_Capture?labelColor=black&style=flat-square
[github-stars-link]: https://github.com/Ikaros-521/LX_Multi_Capture/network/stargazers
[github-stars-shield]: https://img.shields.io/github/stars/Ikaros-521/LX_Multi_Capture?color=ffcb47&labelColor=black&style=flat-square
[pr-welcome-link]: https://github.com/Ikaros-521/LX_Multi_Capture/pulls
[pr-welcome-shield]: https://img.shields.io/badge/%F0%9F%A4%AF%20PR%20WELCOME-%E2%86%92-ffcb47?labelColor=black&style=for-the-badge
[profile-link]: https://github.com/LuoXi-Project