Squoosh 是Google开源的压缩图片工具, 基于网端, 支持多种格式, 非常好用。可惜的是不支持批量操作, 在之前的文章中, 我利用selenium实现图片自动上传下载, 实现批量操作:

利用selenium批量调用Squoosh压缩图片 | Monkey’s Hut

而在Squoosh新的版本发布后, 有了CLI版本, 可以直接在命令行中调用Squoosh压缩命令, 但是安装的过程中, 遇到点Bug, 因此记录一下, 供大家参考。Bug主要来源于node版本、Squoosh更新造成的, 可能在后期的版本中这些这些bug不会存在, 所以这篇博客的时效性较强, 仅供参考。

1 环境配置

Windows 10

node v16.5.0

npm 7.20.2

squoosh-cli

2 安装

1 Nodejs

Node.js下载并安装, 旧版本的Nodejs 可能会导致的CommonJS语法报错, 如下:

SyntaxError: The requested module '@squoosh/lib' is expected to be of type CommonJS, which does not support named exports.

2 Squoosh

1
2
# 安装
npm i -g @squoosh/cli

3 使用

测试图片, 用官方给出的参数如下, 注意:

  1. 如果输入文件和输出文件在同一个目录, 压缩图像会覆盖原始图像
  2. 不指定输出文件夹, 即不使用-d命令, 默认输出在命令所在目录。
1
squoosh/cli --mozjpeg auto "C:\Users\dell\Desktop\IMG_20210729_195643.jpg"

如果图片较小, 则顺利输出, 但输出时间很长。而且如果图片过大(示例图片4M), 会出现memory access out of bounds报错。这都是由于参数设置不当导致的。

打开网页版Squoosh, 添加图片, squoosh自动设置参数并压缩, 点击Edit面板上Copy npx command 按钮, 复制参数命令。

将指令开头npx @squoosh/cli替换成squoosh/cli, 结尾加上"文件路径"。输入cmd命令如下:

1
squoosh/cli --mozjpeg '{"quality":80,"baseline":false,"arithmetic":false,"progressive":true,"optimize_coding":true,"smoothing":0,"color_space":3,"quant_table":3,"trellis_multipass":false,"trellis_opt_zero":false,"trellis_opt_table":false,"trellis_loops":1,"auto_subsample":true,"chroma_subsample":2,"separate_chroma_quality":false,"chroma_quality":75}' "C:\Users\dell\Desktop\IMG_20210729_195643.jpg"

出现Cannot use 'in' operator to search for 'quality的报错, 这是由于Windows cmd中引号转义错误导致, 在双引号前加入\, 并将'更改为", 更改后指令如下:

1
squoosh/cli --mozjpeg "{\"quality\":80,\"baseline\":false,\"arithmetic\":false,\"progressive\":true,\"optimize_coding\":true,\"smoothing\":0,\"color_space\":3,\"quant_table\":3,\"trellis_multipass\":false,\"trellis_opt_zero\":false,\"trellis_opt_table\":false,\"trellis_loops\":1,\"auto_subsample\":true,\"chroma_subsample\":2,\"separate_chroma_quality\":false,\"chroma_quality\":75}" "C:\Users\dell\Desktop\IMG_20210729_195643.jpg"

或者, 用powershell来代替cmd可解决引号的问题:

如果powershell出现ps1禁止运行的报错, 使用管理员运行powershell, 输入Set-ExecutionPolicy RemoteSigned, 更改执行策略, 再执行squoosh-cli命令即可。

4 参考文献

免费开源图片压缩工具 Squoosh 离线版 - 小众软件

squoosh/cli at dev · GoogleChromeLabs/squoosh

squoosh cli windows conversion stuck · Issue #1104 · GoogleChromeLabs/squoosh