Files
tools/cutPic/README.md
T

284 lines
6.8 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.
# cutpic - 图片裁切工具 🖼️
一个简单易用的命令行图片裁切工具,可以将图片按指定的行列数均匀分割成多个小图片。
## ✨ 功能特性
- 📐 **灵活分割**: 支持自定义水平和垂直分割数
- 🎯 **均匀裁切**: 自动计算每块尺寸,均匀分割图片
- 📁 **智能输出**: 默认在输入文件同级目录创建 dist 文件夹
- 🖼️ **多格式支持**: 支持 PNG, JPG, JPEG, BMP, GIF, WebP 等常见图片格式
- 🔢 **智能命名**: 自动生成带序号的文件名,方便识别和管理
-**高性能**: 基于 Rust 开发,处理速度快
## 📦 安装
### 从源码编译
```bash
cd cutPic
cargo build --release
```
编译后的可执行文件位于 `target/release/cutpic.exe`
### 添加到系统路径(可选)
`target/release/cutpic.exe` 复制到系统 PATH 目录,或将其所在目录添加到 PATH 环境变量中。
## 🚀 快速开始
### 基本用法
```bash
# 将图片分割成 3x2 的网格(共6块)
cutpic -i image.png -w 3 -h 2
# 将图片分割成 4x4 的网格(共16块)
cutpic -i photo.jpg -w 4 -h 4
```
### 指定输出目录
```bash
# 指定输出到 custom_output 目录
cutpic -i image.png -w 2 -h 2 --out ./custom_output
```
## 📖 命令参数
```bash
cutpic [OPTIONS] -i <INPUT>
参数:
-i, --input <FILE> 📁 输入图片路径(必需)
-w, --width <NUM> 📐 水平方向分割数(默认: 1)
-h, --height <NUM> 📏 垂直方向分割数(默认: 1)
--out <DIR> 📂 输出目录(默认: 输入文件同级的 dist 文件夹)
-h, --help 显示帮助信息
-V, --version 显示版本信息
```
## 💡 使用示例
### 示例 1: 制作拼图素材
将一张大图分割成 5x5 的拼图块:
```bash
cutpic -i puzzle.png -w 5 -h 5
```
**输出:**
- 生成 25 张图片
- 文件命名: `puzzle_1_25.png`, `puzzle_2_25.png`, ..., `puzzle_25_25.png`
- 输出位置: `./dist/` 目录
### 示例 2: 提取图标集中的单个图标
从 4x4 排列的图标集中提取每个图标:
```bash
cutpic -i icons.png -w 4 -h 4 --out ./individual_icons
```
**输出:**
- 生成 16 张单独的图标
- 输出到 `./individual_icons/` 目录
### 示例 3: 分割游戏精灵图(Sprite Sheet
横向分割角色动画帧(8 帧动画):
```bash
cutpic -i character.png -w 8 -h 1 --out ./animation_frames
```
**输出:**
- 生成 8 张动画帧图片
- 适合用于游戏开发中的帧动画
### 示例 4: 只进行水平分割
将横幅广告图分割成 4 部分:
```bash
cutpic -i banner.png -w 4 -h 1
```
### 示例 5: 只进行垂直分割
将长图分割成 3 段:
```bash
cutpic -i long-image.jpg -w 1 -h 3
```
## 📊 输出说明
### 文件命名规则
生成的文件遵循以下命名格式:
```
{原文件名}_{序号}_{总数}.{扩展名}
```
**示例:**
- 原文件: `image.png`
- 分割: 3x2 (共6块)
- 输出文件:
- `image_1_6.png` - 第1块
- `image_2_6.png` - 第2块
- ...
- `image_6_6.png` - 第6块
### 输出目录结构
```
项目目录/
├── image.png # 原始图片
└── dist/ # 默认输出目录
├── image_1_6.png
├── image_2_6.png
├── image_3_6.png
├── image_4_6.png
├── image_5_6.png
└── image_6_6.png
```
如果指定了 `--out` 参数:
```
项目目录/
├── image.png # 原始图片
└── my_output/ # 自定义输出目录
├── image_1_6.png
├── image_2_6.png
└── ...
```
## ⚙️ 工作原理
1. **加载图片**: 读取输入图片并获取尺寸信息
2. **计算尺寸**:
- 每块宽度 = 总宽度 ÷ 水平分割数
- 每块高度 = 总高度 ÷ 垂直分割数
3. **逐块裁切**: 按行列顺序遍历,裁切每一块
4. **处理边界**: 最后一行/列可能包含剩余像素,自动调整尺寸
5. **保存文件**: 按命名规则保存到输出目录
### 边界处理示例
假设图片尺寸为 100x100 像素,分割为 3x3
- 理论每块: 33.33 x 33.33 像素
- 实际处理:
- 第1、2块: 33 x 33 像素
- 第3块: 34 x 34 像素(包含剩余像素)
这样确保所有像素都被保留,不会丢失任何内容。
## 🎯 应用场景
### 1. 游戏开发
- 分割 Sprite Sheet 为单独的动画帧
- 提取瓦片地图(Tilemap)的单个瓦片
- 处理角色、道具等资源图片
### 2. 网页设计
- 将大图分割成小块用于懒加载
- 制作图片拼图效果
- 优化大图的加载性能
### 3. 社交媒体
- 制作 Instagram 九宫格图片
- 分割长图为适合移动端查看的多张图片
- 创建有趣的图片分割效果
### 4. 数据处理
- 批量处理扫描文档
- 分割大幅面图纸
- 处理卫星图像或地图切片
### 5. 教育用途
- 制作教学用拼图
- 分解复杂图表
- 创建互动学习材料
## ⚠️ 注意事项
1. **图片格式**: 输出格式与输入格式相同
2. **最小分割**: 分割数为 1x1 时,会生成原图的副本
3. **内存使用**: 处理超大图片时会占用较多内存
4. **文件数量**: 分割数越多,生成的文件越多,注意磁盘空间
5. **索引顺序**: 文件按先行后列的顺序编号(从左到右,从上到下)
## 🔧 技术细节
### 依赖库
- **clap**: 命令行参数解析
- **image**: 图片处理和裁切
### 性能特点
- 使用 Rust 编写,性能优异
- 支持多线程(取决于 image 库的实现)
- 内存效率高,逐块处理
### 平台支持
- ✅ Windows
- ✅ macOS
- ✅ Linux
## 📝 完整示例工作流
### 工作流 1: 制作 Instagram 九宫格
```bash
# 1. 准备一张正方形图片(建议 1080x1080 或更高)
# 2. 分割成 3x3 的九宫格
cutpic -i instagram-post.png -w 3 -h 3 --out ./instagram-grid
# 3. 上传生成的 9 张图片到 Instagram(按逆序上传以获得正确显示顺序)
```
### 工作流 2: 提取游戏资源
```bash
# 1. 从游戏中提取 sprite sheet
# 2. 分析 sprite sheet 的布局(例如 8x4 排列)
cutpic -i spritesheet.png -w 8 -h 4 --out ./game-assets
# 3. 重命名生成的文件为有意义的名称
# 4. 在游戏引擎中使用这些单独的资源
```
### 工作流 3: 创建拼图游戏
```bash
# 1. 选择一张有趣的图片
# 2. 根据难度选择分割数(简单: 3x3, 中等: 5x5, 困难: 8x8
cutpic -i puzzle-image.jpg -w 5 -h 5 --out ./puzzle-pieces
# 3. 打乱文件顺序
# 4. 开发拼图游戏逻辑
```
## 🤝 贡献
欢迎提交 Issue 和 Pull Request
## 📄 许可证
本项目采用 MIT 许可证。
## 🙏 致谢
感谢以下开源项目:
- [clap](https://github.com/clap-rs/clap) - 优秀的命令行参数解析库
- [image](https://github.com/image-rs/image) - 强大的图片处理库
---
**Made with ❤️ using Rust**