它是 Squoosh,但采用 Node 库。
我们很高兴推出 libSquoosh,这是一个基于 Squoosh CLI 构建的实验性 Node 库,可为您提供具有 JavaScript 惯用接口的 Squoosh CLI 的所有功能。
Squoosh.app 是一款 PWA,可在浏览器中为您压缩图片。它支持许多新旧图片格式,并通过 WebAssembly 在浏览器中对它们进行客户端处理。这意味着你的照片将安全地保存在自己的计算机上,而不会发送到某个服务器,而且 Squoosh 即使在离线状态下也能工作。
在 2020 年 Chrome 开发者峰会上,我们宣布推出 Squoosh v2,同时搭配 Squoosh CLI 使用 Node 和 WebAssembly 将 Squoosh 的所有编解码器都部署到命令行中。这样,您就可以使用一条命令压缩整个文件夹,并利用 CLI 让其为您选择编解码器参数。
CLI 支持许多自动化操作,因此开发者自然会开始要求使用比通过 shell 以编程方式调用 Squoosh CLI 更符合编程习惯的接口。Anton(GitHub 上的 @atjn)已经完成此任务,并将 Squoosh CLI 代码分为两部分:命令行界面代码和底层核心功能。
import { ImagePool } from "@squoosh/lib";
// libSquoosh uses a worker-pool under the hood
// to parallelize all image processing.
const imagePool = new ImagePool();
// Accepts both file paths and Buffers/TypedArrays.
const image = imagePool.ingestImage("./squoosh.jpeg");
// Optional.
// await image.preprocess({
// resize: {
// enabled: true,
// width: 128,
// },
// });
await image.encode({
// All codecs are initialized with default values
// that can be individually overwritten.
mozjpeg: {
quality: 10,
},
avif: {
cqLevel: 10,
},
jxl: {},
});
const { extension, binary } = await image.encodedWith.mozjpeg;
await fs.writeFile(`output.${extension}`, binary);
// ... same for other encoders ...
await imagePool.close();
我们的目标是让工具作者能够更轻松地使用图片压缩功能。我们希望能集成到 Webpack、Rollup 和其他构建工具中,确保您的映像针对 Web 进行适当优化。
我衷心感谢 Anton 对 Squoosh 的承诺!
Squoosh CLI 和 libSquoosh 仍处于早期阶段,我们还有更多想法和计划想要实现。在此期间,不妨试试 libSquoosh!但请注意,这是一个早期实验版本,您很可能会遇到一些 bug。如果您发现某些问题或有疑问,请提交问题。
如果您有兴趣为 Squoosh 贡献力量(例如,为关于 libSquoosh 的极为稀疏的文档贡献代码,或者希望为该应用的任何其他部分提供帮助,我们正启动一项指导计划,以帮助您顺利上手。如需了解详情,请查看我们的跟踪问题。