Scopri libSquoosh

È Squoosh, ma come libreria di nodi.

Siamo lieti di presentare libSquoosh, una libreria di nodi sperimentale in cui è stata creata l'interfaccia a riga di comando di Squoosh, che offre tutte le funzionalità dell'interfaccia a riga di comando di Squoosh con un'interfaccia idiomatica di JavaScript.

Squoosh.app è una PWA che comprime le immagini nel browser. Supporta molti formati di immagine vecchi e nuovi e li elabora lato client nel browser tramite WebAssembly. Ciò significa che le tue immagini rimangono al sicuro sul tuo computer anziché essere inviate a un server da qualche parte, e Squoosh funziona anche quando sei offline.

Al Chrome DevSummit 2020 abbiamo annunciato Squoosh v2, insieme all'interfaccia a riga di comando Squoosh per portare tutti i codec di Squoosh nella riga di comando utilizzando Node e WebAssembly. In questo modo puoi comprimere intere cartelle con un solo comando e utilizzare gli CLI per scegliere automaticamente i parametri del codec.

L'interfaccia a riga di comando consente molta automazione, quindi è naturale che gli sviluppatori inizino a chiedere un'interfaccia più idiomatica rispetto a richiamare in modo programmatico l'interfaccia a riga di comando di Squoosh tramite la shell. Anton (@atjn su GitHub) ha proseguito l'attività e ha separato il codice dell'interfaccia a riga di comando Squoosh in due parti: il codice dell'interfaccia della riga di comando e la funzionalità di base sottostante.

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

Il nostro obiettivo è rendere la compressione delle immagini più accessibile agli autori degli strumenti. Ci auguriamo di vedere l'integrazione in Webpack, Rollup e altri strumenti di creazione per garantire che le tue immagini siano ottimizzate in modo appropriato per il web.

Vorrei ringraziare Anton per il tempo che si è impegnato per Squoosh.

L'interfaccia a riga di comando di Squoosh e libSquoosh è ancora presto e abbiamo molte altre idee e piani che vorremmo implementare. Nel frattempo, prova libSquoosh! Tuttavia, tieni presente che si tratta di una release sperimentale in anteprima e che ci sono buone probabilità che si verifichino alcuni bug. Se ne trovi alcune o hai domande, apri un problema.

Se ti interessa dare il tuo contributo per Squoosh, ad esempio per avere contribuito alla scarsa documentazione su libSquoosh o per fornire assistenza in altre parti dell'app, stiamo avviando un programma di tutoraggio per aiutarti a iniziare. Per saperne di più, consulta il nostro problema di monitoraggio.