libSquoosh 簡介

它是 Squoosh,但是 Node 程式庫。

我們很高興推出 libSquoosh 這個實驗性節點程式庫,做為 Squoosh CLI 建構系統的上層程式庫,可讓您透過 JavaScript 慣用介面使用 Squoosh CLI 的所有功能。

Squoosh.app 是能在瀏覽器中壓縮圖片的 PWA,支援多種新舊圖片格式,並透過 WebAssembly,在用戶端在瀏覽器中處理。這表示圖片會安全地儲存在你的電腦上,而非傳送到其他位置的伺服器。即使離線,Squoosh 也能正常運作。

在 2020 年 Chrome DevSummit 大會中,我們宣布推出 Squoosh v2,透過 Squoosh CLI,透過 Node 和 WebAssembly 將 Squoosh 的所有轉碼器整合至指令列。如此一來,您就能使用一個指令壓縮整個資料夾,並使用 CLI's 來為您選擇轉碼器參數。

CLI 帶來大量的自動化作業,因此開發人員開始要求使用比程式語言更符合語言習慣的介面,而非透過 shell 叫用 Squoosh CLI 的情況。Anton (@atjn on GitHub) 進一步完成任務,將 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 等稀疏稀疏的文件,或應用程式任何其他部分的協助),我們即將推出一項指導計畫,協助你踏出第一步。如要瞭解詳情,請參閱追蹤問題