图片压缩
官方脚本
可调用节点
v1.1.1
图片批量压缩 | 支持 JPEG/PNG/WebP/AVIF 互转、MozJPEG 深度优化、批量压缩、质量与最大边长可调 | 一键缩小图片体积、画质更佳,支持右键/快捷键触发,可作节点被调用
脚本能力
直接启动支持
右键启动支持
快捷键启动支持
超级复制启动不支持
定时任务不支持
可被其他脚本调用是
依赖其他脚本否
图形化启动界面支持
在「不忙脚本盒子」中一键批量压缩图片:支持 JPEG / PNG / WebP / AVIF 四种格式互转,内置 MozJPEG 深度优化,画质更佳、体积更小,也可作为节点被其他脚本调用。
核心特性
- 一键批量压缩:右键选中一张或多张图片即可批量处理,压缩结果自动保存回原目录
- 四种格式互转:JPEG / PNG / WebP / AVIF 任意输入输出,选择不同格式即完成格式转换
- MozJPEG 深度优化:JPEG 采用 MozJPEG 编码,同等画质下体积更小
- PNG 无损压缩:最高压缩等级 + 自适应过滤,无损且体积更小
- WebP / AVIF 支持:现代高压缩率格式,进一步缩小图片体积
- 参数灵活可调:压缩质量、输出格式、最大边长均可在启动窗口中即时调整
- 可作为节点:其他脚本可通过盒子接口同步调用,返回压缩结果路径
脚本演示

安装方法
本脚本的运行环境、依赖组件及启动窗口均依赖「不忙脚本盒子」,建议仅通过盒子安装和使用。
前置条件:已安装 不忙脚本盒子
- 打开盒子 → 脚本市场
- 搜索 「图片批量压缩」
- 点击「安装」
使用方式
右键菜单
- 在文件管理器中选中一张或多张图片
- 右键 → 「不忙脚本盒子」→「图片批量压缩」
- 在启动窗口中按需调整参数(默认值已填好),点击执行即可
快捷键
- 在盒子的「热键管理」页面为本脚本设置全局快捷键
- 选中图片后按下快捷键,即可快速启动压缩
输出位置
压缩结果保存在原图片所在目录,文件名为 原文件名_compressed.{扩展名},扩展名随所选输出格式变化:
| 输出格式 | 扩展名 | 示例(源 photo.png) |
|---|---|---|
| JPEG | .jpg |
photo_compressed.jpg |
| PNG | .png |
photo_compressed.png |
| WebP | .webp |
photo_compressed.webp |
| AVIF | .avif |
photo_compressed.avif |
💡 使用提示
- 压缩质量:取值 1~100,数值越高画质越好、体积越大;JPEG / WebP / AVIF 建议 70~85,PNG 为无损压缩不受质量影响。
- 输出格式:与源图格式相同则仅做压缩;选择不同格式即同时完成格式转换。
- 最大边长:填
0表示保持原尺寸;填1920等数值会等比缩小超过该边长的图片。 - 同名覆盖:输出文件与源文件同目录,若同名文件已存在会被直接覆盖,请留意。
节点脚本(开发者阅读)
本脚本已声明为节点(node),其他脚本可通过盒子 /api/link 同步调用,返回业务键:
| 键 | 类型 | 说明 |
|---|---|---|
output_paths |
list | 压缩成功后的图片绝对路径列表 |
failed |
list | 处理失败的文件及原因,元素形如 {file, error} |
返回信封示例:
{ "code": 0, "msg": "成功 3 个,失败 0 个", "output_paths": ["C:/a_compressed.jpg"], "failed": [] }
此外,直接执行 node main.js(不带参数)可打开独立预览界面,支持拖拽、原图/压缩后实时对比,便于单张调参。
🖥️ 环境要求
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 10+ |
| 运行环境 | Node.js >= 20(由盒子自动安装) |
| 依赖 | sharp(由盒子自动安装) |
| 可选界面 | Edge / Chromium 内核(独立预览界面使用) |
本脚本已声明为节点,可被其他脚本通过「不忙脚本盒子」机制调用。完整配置见下方 TOML,其他脚本若需调用请严格按此配置构造请求。
bm-scripts-box-rc.toml
[bmscriptsbox]
[bmscriptsbox.info]
id = "a7b9c3d1-e2f4-5a6b-8c7d-9e0f1a2b3c4d"
name = "图片压缩"
desc = "图片批量压缩 | 支持 JPEG/PNG/WebP/AVIF 互转、MozJPEG 深度优化、批量压缩、质量与最大边长可调 | 一键缩小图片体积、画质更佳,支持右键/快捷键触发,可作节点被调用"
version = "1.1.1"
icon = "imgs/logo.png"
[bmscriptsbox.runtime]
language = "node.js"
language_version = ">=20.0"
entry = "main.js"
terminal = "always"
[bmscriptsbox.triggers.context_menu]
enabled = true
targets = ["files"]
filters = [".png", ".jpg", ".jpeg", ".gif", ".bmp", ".webp", ".avif", ".tiff"]
[bmscriptsbox.triggers.shortcut]
enabled = true
filters = [".png", ".jpg", ".jpeg", ".gif", ".bmp", ".webp", ".avif", ".tiff"]
[[bmscriptsbox.inputs]]
name = "target_paths"
label = "图片"
type = "list"
pick = "files"
exts = [".png", ".jpg", ".jpeg", ".gif", ".bmp", ".webp", ".avif", ".tiff"]
description = "要压缩的图片文件,可多选"
[[bmscriptsbox.outputs]]
name = "output_paths"
type = "list"
description = "压缩成功后的图片绝对路径列表"
[[bmscriptsbox.outputs]]
name = "failed"
type = "list"
description = "处理失败的文件及原因,元素形如 {file, error}"
[[bmscriptsbox.params]]
name = "quality"
label = "压缩质量"
type = "int"
default = 80
description = "压缩质量,取值 1-100,数值越高画质越好、体积越大"
[[bmscriptsbox.params]]
name = "format"
label = "输出格式"
type = "str"
default = "jpeg"
choices = ["jpeg", "png", "webp", "avif"]
choice_labels = { jpeg = "JPEG", png = "PNG", webp = "WebP", avif = "AVIF" }
description = "输出格式,与源图格式不同即为格式转换"
[[bmscriptsbox.params]]
name = "max_size"
label = "最大边长"
type = "int"
default = 0
description = "限制图片最大边长(像素),0 表示保持原尺寸"
[bmscriptsbox.node]
enabled = true
[bmscriptsbox.params_form]
enabled = true
评论