图片分割
官方脚本
可调用节点
v1.1.0
图片批量分割 | 九宫格与自定义行列网格(1×1~10×10)切割、网格线实时预览、多图批量、碎片输出到源目录 | 支持右键/快捷键/卡片触发,可被其他脚本联动调用
脚本能力
直接启动支持
右键启动支持
快捷键启动支持
超级复制启动不支持
定时任务不支持
可被其他脚本调用是
依赖其他脚本否
图形化启动界面不支持
将图片按九宫格或自定义网格批量切割,碎片保存到源图片目录。
核心特性
- 网格预设:2×2、3×3(九宫格)、4×4、2×3、3×2、1×3、3×1、1×1、5×5 一键切换
- 自定义行列:列数、行数 1~10 自由调节
- 网格线实时预览:图片上叠加分割线,分割前即可确认效果
- 多图批量:一次性添加多张图片,点「确定分割」统一处理
- 像素不丢失:不能整除时自动把余数分给末尾的块,保证完整覆盖原图
- 尺寸安全:列/行数超过图片宽高时自动收敛,避免产生 0 像素碎片
- 输出到源目录:碎片命名为
原名_split_1.png、原名_split_2.png… - 配置自动记忆:行列设置自动保存,下次打开沿用
- 离线可用:界面与渲染全部本地完成,无任何外部依赖
脚本演示

安装方法
本脚本的运行环境、依赖组件及图形化窗口均依赖「不忙脚本盒子」,建议仅通过盒子安装和使用。
前置条件:安装好 不忙脚本盒子
- 打开盒子 → 脚本市场 → 搜索 「图片分割」
- 点击「安装」,等待安装完成
手动安装:需自行安装 Node.js >= 16,在脚本目录执行 npm install && node main.js。
使用方式
-
打开窗口(任意方式都会弹出配置窗口)
- 在盒子主界面点击「图片分割」卡片
- 在盒子「热键管理」为该脚本绑定快捷键后按下
- 在文件夹中选中图片 → 右键 → 不忙脚本盒子 → 图片分割
-
添加图片(三选一,可混合)
- 点「添加图片」:打开系统文件对话框,可多选(记录源目录,输出到源目录)
- 点「选择图片」:用系统文件选择器多选
- 直接把图片拖进预览区
-
设置网格
- 点预设按钮(如 3×3 九宫格),或拖动「列数 / 行数」滑块
- 预览区实时显示网格线;下方显示实际生效的网格与块数
-
分割
- 点「确定分割」,逐张处理并显示进度
- 全部成功:提示「已输出 N 块」,窗口自动关闭;有失败则保留窗口显示原因
🔗 作为节点被调用(脚本联动)
本脚本已声明为节点([bmscriptsbox.node] enabled = true),可被其他脚本通过 /api/link 同步调用:不弹窗口、不等待输入,静默处理并把结果写入信封。
- 输入:
target_paths(图片路径数组) -
运行参数
参数 类型 默认 说明 colsint 3 列数(1~10),超过图片宽度自动收敛 rowsint 3 行数(1~10),超过图片高度自动收敛 suffixstr _split 碎片文件名前缀,输出 原名+suffix+N.png -
输出(信封)
键 类型 说明 codeint 0 成功;非 0 失败 msgstr 结果说明 fileslist 全部碎片文件路径列表 countint 碎片总数
调用示例(调用方脚本):
import json, sys, requests
env = json.load(open(sys.argv[1], encoding='utf-8'))['environment']
r = requests.post(f"{env['api_base']}/api/link", json={
"script_id": "a4b8c2d9-1e5f-3a7b-6c4d-8e9f0a1b2c3d", # 本脚本 id
"data": {"target_paths": ["C:/a/photo.jpg"]},
"params": {"cols": 3, "rows": 3, "suffix": "_split"},
}, timeout=3600)
result = r.json()["result"]
if result.get("code") != 0:
raise RuntimeError(result.get("msg"))
print(result["files"], result["count"])
修改 TOML 后需在盒子中重新安装 / 更新本脚本,节点声明才会生效。
💡 使用提示
- 通过右键/快捷键触发时,已在文件管理器中选中的图片会自动带入窗口。
- 碎片写入各图片所在目录;用拖拽添加(无源目录)的图片,碎片会写入
%USERPROFILE%\Pictures\。 - 编号按从左到右、从上到下排列;重复分割会覆盖同名碎片。
- 输出固定为 PNG 格式(保留原图色彩)。
🖥️ 环境要求
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 10 1803+(64 位) |
| 运行环境 | Node.js >= 16(盒子自动下载) |
| 外部工具 | webview-cli(盒子自动下载) |
| 运行依赖 | @napi-rs/canvas(盒子自动安装) |
更新日志
- v1.1.0(当前最新版)
- 界面重写为本地设计系统,去除 Tailwind CDN,改用 webview-cli 独立窗口(完全离线)
- 服务端动态端口、移除 PID 单例与任意路径读图,静态访问加越界校验
- 支持多图批量,碎片由服务端直接保存(原为浏览器多次下载)
- 修复不能整除时丢像素:余数分配给末尾块,完整覆盖原图
- 修复列/行数超过图片尺寸产生 0 像素碎片:自动收敛并在界面提示
- 修复参数 JSON 读取与节点信封,声明为节点脚本(cols / rows / suffix)
本脚本已声明为节点,可被其他脚本通过「不忙脚本盒子」机制调用。完整配置见下方 TOML,其他脚本若需调用请严格按此配置构造请求。
bm-scripts-box-rc.toml
[bmscriptsbox]
[bmscriptsbox.info]
id = "a4b8c2d9-1e5f-3a7b-6c4d-8e9f0a1b2c3d"
name = "图片分割"
desc = "图片批量分割 | 九宫格与自定义行列网格(1×1~10×10)切割、网格线实时预览、多图批量、碎片输出到源目录 | 支持右键/快捷键/卡片触发,可被其他脚本联动调用"
version = "1.1.0"
icon = "./imgs/logo.png"
[bmscriptsbox.runtime]
language = "node.js"
language_version = ">=v16.0"
entry = "main.js"
terminal = "never"
binaries = [{name = "webview-cli"}]
[bmscriptsbox.triggers.context_menu]
enabled = true
targets = ["files"]
filters = [".png", ".jpg", ".jpeg", ".gif", ".bmp", ".webp"]
[bmscriptsbox.triggers.shortcut]
enabled = true
input_type = "files"
filters = [".png", ".jpg", ".jpeg", ".gif", ".bmp", ".webp"]
[[bmscriptsbox.inputs]]
name = "target_paths"
label = "图片"
type = "list"
exts = [".png", ".jpg", ".jpeg", ".gif", ".bmp", ".webp"]
description = "要分割的图片文件"
[[bmscriptsbox.outputs]]
name = "files"
type = "list"
description = "分割后生成的碎片文件路径列表"
[[bmscriptsbox.outputs]]
name = "count"
type = "str"
description = "生成的碎片总数"
[[bmscriptsbox.params]]
name = "cols"
label = "列数"
type = "int"
default = 3
required = false
description = "水平方向分割块数(1~10),超过图片宽度时自动收敛"
[[bmscriptsbox.params]]
name = "rows"
label = "行数"
type = "int"
default = 3
required = false
description = "垂直方向分割块数(1~10),超过图片高度时自动收敛"
[[bmscriptsbox.params]]
name = "suffix"
label = "文件名后缀"
type = "str"
default = "_split"
required = false
description = "碎片文件名前缀,如 _split => 原名_split_1.png"
[bmscriptsbox.node]
enabled = true
评论