libSquoosh 簡介

它是 Squoosh,不過是節點程式庫。

我們很高興推出 libSquoosh,在 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 和其他建構工具整合,確保您的圖片針對網路進行最佳化調整。

我想表達感謝當時他承諾是 Squoosh!

Squoosh CLI 和 libSquoosh 目前仍處於早期階段,目前有許多值得我們實現的想法和計畫。在這段期間,不妨試試 libSquoosh!不過請注意,由於這是早期實驗版本,您很有機會遇到一些錯誤。如有任何問題或疑問,請建立問題

如果您有興趣為 Squoosh 貢獻內容 (例如提供 libSquoosh 中極為稀疏的說明文件,或提供應用程式其他所有部分的相關協助),我們將發起一項導師計畫,協助你踏出第一步。如需瞭解詳情,請查看我們的追蹤問題