Scopri libSquoosh

È Squoosh, ma come libreria Node.

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

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

Al Chrome DevSummit 2020 abbiamo annunciato Squoosh v2, insieme all'interfaccia a riga di comando Squoosh per portare tutti i codec di Squoosh sulla riga di comando utilizzando Node e WebAssembly. Ciò ti consente di comprimere intere cartelle con un solo comando e di utilizzare gli interfaccia a riga di comando per consentire di scegliere automaticamente i parametri del codec.

L'interfaccia a riga di comando consente molta automazione ed è quindi naturale che gli sviluppatori abbiano iniziato a chiedere un'interfaccia più idiomatica rispetto a richiamare in modo programmatico l'interfaccia a riga di comando Squoosh tramite la shell. Anton (@atjn su GitHub) ha completato l'attività e ha separato il codice dell'interfaccia a riga di comando di Squoosh in due parti: il codice dell'interfaccia a 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 trovare un'integrazione in Webpack, Rollup e altri strumenti di creazione per garantire che le tue immagini siano ottimizzate in modo appropriato per il web.

vorrei esprimere un enorme "grazie" ad Anton per il tempo che si è impegnato con Squoosh!

È ancora presto per l'interfaccia a riga di comando di Squoosh e libSquoosh e abbiamo molte altre idee e piani che vorremmo implementare. Nel frattempo, prova libSquoosh! Tuttavia, tieni presente che si tratta di una versione sperimentale in fase iniziale e che ci sono buone probabilità di riscontrare qualche bug. Se ne trovi alcuni o in caso di domande, apri un problema.

Se ti interessa dare il tuo contributo a Squoosh, ad esempio contribuire alla sparsissima documentazione relativa a libSquoosh o fornire assistenza per altre parti dell'app, stiamo avviando un programma di tutoraggio per aiutarti a iniziare. Per ulteriori informazioni, consulta il nostro problema di monitoraggio.