cantarella:一个图片批量压缩 + 加水印的命令行工具

0 阅读4分钟

为什么需要它

前端项目里,图片体积往往是页面性能的大头。一张高清截图动辄几 MB,一张 iPhone 拍的 HEIC 照片还要额外转格式,想批量压缩、批量加水印,要么打开一堆在线工具逐个上传,要么写一堆零散的脚本。

cantarella 就是来解决这些事的:一个批量压缩 + 批量加水印的命令行工具,一条命令搞定一整个目录的图片。

171711.webp

它是什么

cantarella 是一个基于 Node.js 的命令行工具,提供两个核心子命令:

  • compress —— 批量压缩图片,同时支持格式转换
  • watermark —— 批量给图片加水印(图片 logo 或文字)

它最大的设计理念是两个字:安全。压缩或加水印前会自动把原图备份,压不动(压缩后反而更大)的文件会自动跳过,绝不产出更差的图。

7f10eac7-59ce-419f-89f2-10b5bbe4af5c.png

安装

要求 Node.js >= 22.12.0,然后一行命令搞定:

npm install -g cantarella

想从源码跑开发版也可以:

git clone https://github.com/zzl110712/cantarella.git
cd cantarella
pnpm install
pnpm build   # 编译并压缩 TS 到 dist/
pnpm link    # 注册全局命令 cantarella

快速上手

压缩一个目录

cantarella compress ./images

image.png

如果不想一步步回答问题,直接用默认参数:

cantarella compress ./images -y

它有两种使用方式:

  1. 交互式问答模式:不带参数时,会像向导一样问你压缩质量、输出格式等
  2. 纯 CLI 模式:全部用命令行参数指定,可以直接写进 CI 脚本或 npm script 里

批量加水印

# 加文字水印
cantarella watermark ./images -t "© 我的博客"

# 加图片 logo 水印
cantarella watermark ./images -m ./logo.png

水印支持九宫格定位(左上、右上、中间、左下……),可以调节不透明度和大小比例,还支持平铺铺满(防盗图神器)和斜向平铺

那些让人安心的细节

自动备份

压缩原文件之前,会先把原图保存到备份目录(默认 _backup_,带时间戳)。也就是说,哪怕结果不满意,原图也一直都在:

# 自定义备份目录
cantarella compress ./images --backup-dir ./originals

压不动就跳过

如果某个文件压缩后反而更大(比如本来就优化得很好的 PNG),它会自动跳过,而不是硬着头皮输出一个更烂的文件。

输出到独立目录

如果你连原文件都不想碰,用 --out 把结果写到另一个目录,原图一个字节都不动:

cantarella compress ./images --out ./dist --ext webp

进阶玩法

智能模式

-s 开启智能模式:每张图会按实际编码尝试最小的体积,哪个小留哪个(PNG 输入默认转无损 webp)。所有尝试都没比原图更小的话,就跳过,绝不产出更大的文件

cantarella compress ./images -s

预览与报告

--dry 只做真实编码计算、告诉你压缩后能有多大,但不写任何文件--report 会在目录里生成一份 Markdown 压缩报告:

cantarella compress ./images --dry
cantarella compress ./images --report

格式转换

支持 jpeg / png / webp / avif / tiff / gif 之间互相转,还支持 heic(iPhone 照片)svg 作为输入:

# iPhone 的 HEIC 照片批量转 jpg
cantarella compress ./photos --ext jpg

常用选项速查

选项说明
-y, --yes全部使用默认参数,跳过问答
-s, --smart智能模式,尝试最小体积
-o, --out <dir>输出到独立目录,不动原图
-q, --quality <n>压缩质量(默认 80)
-e, --ext <fmt>目标格式(jpeg/webp/avif...)
-w, --max-width <n>限制最大宽度
--backup-dir <dir>自定义备份目录
--dry预览,不写文件
--report生成 Markdown 压缩报告

水印子命令的相关选项:

选项说明
-t, --text文字水印内容
-m, --mark图片 logo 水印路径
-p, --position九宫格定位
--opacity不透明度
--tile平铺铺满
-a斜向平铺

小结

cantarella 把一个高频但又琐碎的需求——图片批量压缩和加水印——做成了一个顺手、安全、可脚本化的 CLI 工具。自动备份、自动跳过压不动的文件、智能模式、预览报告,这些细节让批量处理图片这件事变得很放心。

如果你也经常被图片体积和格式转换折腾,不妨装一个试试:

npm install -g cantarella

项目地址:github.com/zzl110712/c…npm