Przedstawiamy libSquoosh

To Squoosh, ale jako biblioteka węzłów.

Z przyjemnością przedstawiamy libSquoosh – eksperymentalną bibliotekę węzłów, na której opiera się Squoosh CLI, zapewniającą wszystkie możliwości Squoosh CLI z interfejsem rozpoznawalnym JavaScript.

Squoosh.app to aplikacja PWA, która kompresuje obrazy w przeglądarce. Obsługuje wiele starych i nowych formatów obrazów i przetwarza je po stronie klienta w przeglądarce za pomocą WebAssembly. Dzięki temu zdjęcia są bezpiecznie przechowywane na Twoim komputerze, a nie wysyłane na serwer. Aplikacja Squoosh działa nawet w trybie offline.

Na konferencji Chrome DevSummit 2020 ogłosiliśmy wprowadzenie Squoosh v2 oraz Squoosh CLI, aby przenieść wszystkie kodeki Squoosh do wiersza poleceń przy użyciu Node i WebAssembly. Dzięki temu możesz skompresować całe foldery za pomocą jednego polecenia i skorzystać z interfejsu wiersza poleceń, aby wybrać parametry kodeka za Ciebie.

Interfejs wiersza poleceń umożliwia dużą automatyzację, więc to naturalne, że deweloperzy zaczęli prosić o bardziej idiomatyczny interfejs niż automatyczne wywoływanie interfejsu wiersza poleceń Squoosh za pomocą powłoki. Anton (@atjn w GitHub) zajął się tym zadaniem i rozdzielił kod Squoosh CLI na 2 części: kod interfejsu wiersza poleceń i podstawowe funkcje.

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

Chcemy, aby kompresja obrazów była bardziej dostępna dla autorów korzystających z narzędzi. Liczymy, że nastąpi integracja z Webpackiem, usługą Rollup i innymi narzędziami do kompilacji, dzięki którym Twoje obrazy będą odpowiednio zoptymalizowane pod kątem internetu.

Chcę Ci bardzo podziękować do Antona w czasie, gdy zaangażował się w strumieniowanie Squoosh!

Jest jeszcze za wcześnie na wprowadzenie interfejsu wiersza poleceń Squoosh i libSquoosh i mamy jeszcze wiele innych pomysłów i planów, które chcemy wprowadzić. Tymczasem wypróbuj libSquoosh. Pamiętaj jednak, że jest to wczesna, eksperymentalna wersja i istnieje duże ryzyko wystąpienia błędów. Jeśli znajdziesz jakieś pytania lub znajdziesz jakieś pytania, otwórz stronę problemu.

Jeśli chcesz pomagać w grze Squoosh – na przykład dodawać do niej bardzo ubogą dokumentację dotyczącą libSquoosh lub pomagać w innych obszarach aplikacji – uruchamiamy program mentorski, który pomoże Ci zacząć. Jeśli chcesz dowiedzieć się więcej, przeczytaj o problemie ze śledzeniem.