libSquoosh 简介

它是 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 的极为稀疏的文档贡献代码,或者希望为该应用的任何其他部分提供帮助,我们正启动一项指导计划,以帮助您顺利上手。如需了解详情,请查看我们的跟踪问题