libSquoosh の概要

Squoosh ですが、Node ライブラリです。

このたび、Squoosh CLI が構築された試験運用版の Node ライブラリである libSquoosh をご紹介します。Squoosh CLI のすべての機能は、JavaScript 固有のインターフェースを備えています。

Squoosh.app は、ブラウザで画像を圧縮する PWA です。新旧さまざまな画像形式をサポートしており、WebAssembly を使用してブラウザでクライアントサイドで処理できます。つまり、撮影した写真がどこかのサーバーに送信されるのではなく、自分のパソコン上に安全に保管され、Squoosh はオフラインでも動作します。

Chrome DevSummit 2020 で、Google は Squoosh v2 を発表し、Squoosh CLI とともに、Node と WebAssembly を使用して Squoosh のすべてのコーデックをコマンドラインに移行しました。これにより、1 つのコマンドでフォルダ全体を圧縮し、CLI を使用してコーデック パラメータを自動的に選択できるようになります。

CLI によって多くの自動化が可能になるため、デベロッパーがシェルから Squoosh CLI をプログラムで呼び出すよりも慣用的なインターフェースを求めるようになったのは当然のことです。Anton(GitHub の @atjn)がこのタスクに参加し、Squoosh CLI のコードをコマンドライン インターフェース コードと基盤となるコア機能の 2 つの部分に分けました。

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();

Google の目標は、ツール作成者が画像圧縮を利用しやすくすることです。Webpack や Rollup などのビルドツールとの統合により、画像がウェブに適切に最適化されることを期待しています。

「本当にありがとう」とアントンがスクオッシュにコミットした間、彼はアントンに送りました。

Squoosh CLI と libSquoosh はまだ初期段階であり、実装してみたいアイデアや計画はまだたくさんあります。それまでは libSquoosh をお試しください。ただし、これは早期の試験運用版リリースであり、バグに遭遇する可能性が高い点に留意してください。問題が見つかった場合や質問がある場合は、問題を作成してください。

libSquoosh 関連の極めて希少なドキュメントへの貢献や、アプリのその他の部分の支援など、Squoosh に貢献したいとお考えの方向けに、Google では、始めるためのメンターシップ プログラムを開始しています。詳しくは、トラッキングに関する問題をご覧ください。