libSquoosh 简介

它是 Squoosh,但以 Node 库的形式提供。

我们很高兴地推出 libSquoosh,这是一种实验性 Node 库,在 Squoosh CLI 的基础上构建而成,通过 JavaScript 惯用的界面为您提供 Squoosh CLI 的所有功能。

Squoosh.app 是一款可在浏览器中压缩图片的 PWA。它支持许多新旧图片格式,并通过 WebAssembly 在浏览器中在客户端对其进行处理。这意味着您的照片会安全地保存在您的计算机上,而不会发送到某处的服务器,并且即使在离线状态下,Squoosh 也可以工作。

在 Chrome DevSummit 2020 上,我们宣布推出 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 和其他构建工具中,确保您的图片针对网络进行了适当的优化。

我要对此表示衷心的感谢向 Anton 承诺了为 Squoosh 做承诺的时间!

Squoosh CLI 和 libSquoosh 仍然处于早期阶段,我们还有很多想法和计划要付诸实施。同时,不妨试试 libSquoosh!不过请注意,由于该版本为早期实验版本,您很有可能会遇到一些错误。如果您发现某些问题或有疑问,请提出问题

如果您有兴趣为 Squoosh 做贡献(例如,为关于 libSquoosh 的极为稀疏的文档做贡献,或帮助改进应用的任何其他部分),我们将启动一个指导计划来帮助您入门。如需了解更多信息,请查看我们的跟踪问题