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 では、始めるためのメンターシップ プログラムを開始しています。詳しくは、トラッキングに関する問題をご覧ください。