Apresentação do libSquoosh

É o Squoosh, mas como uma biblioteca Node.

Temos a satisfação de apresentar a libSquoosh, uma biblioteca experimental de Node na qual a CLI do Squoosh foi criada. Ela oferece todos os recursos da CLI do Squoosh com uma interface idiomática para JavaScript.

O Squoosh.app é um PWA que compacta imagens para você no navegador. Ele suporta muitos formatos de imagem novos e antigos e os processa do lado do cliente no navegador por meio do WebAssembly. Isso significa que as imagens ficam em segurança no seu próprio computador, em vez de serem enviadas para um servidor em algum lugar, e que o Squoosh funciona mesmo off-line.

No Chrome DevSummit 2020, anunciamos o Squoosh v2 e a Squoosh CLI para levar todos os codecs do Squoosh à linha de comando usando o Node e o WebAssembly. Isso permite que você compacte pastas inteiras com um comando e use as CLIs para que elas escolham os parâmetros do codec para você.

A CLI permite muita automação. Por isso, é natural que os desenvolvedores comecem a pedir uma interface mais idiomática do que a invocação programática da CLI do Squoosh pelo shell. Anton (@atjn no GitHub) assumiu a tarefa e separou o código da CLI Squoosh em duas partes: o código da interface de linha de comando e a funcionalidade principal.

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

Nosso objetivo é tornar a compactação de imagens mais acessível aos autores de ferramentas. Esperamos ver a integração com o Webpack, o Rollup e outras ferramentas de compilação para garantir que suas imagens sejam otimizadas adequadamente para a Web.

Gostaria de agradecer imensamente a Antônio pelo tempo que ele dedicou à Squoosh!

A CLI do Squoosh e o libSquoosh ainda são cedo, e temos muitas outras ideias e planos que queremos implementar. Enquanto isso, use o libSquoosh! No entanto, saiba que esta é uma versão inicial e experimental e que há uma boa chance de você encontrar alguns bugs. Se você encontrar algum problema ou tiver dúvidas, abra um problema.

Se você tiver interesse em contribuir com o Squoosh, por exemplo, contribuindo com a documentação extremamente esparsa sobre o libSquoosh ou com qualquer outra parte do app, estamos iniciando um programa de mentoria para ajudar você a começar. Para saber mais, confira nosso problema de rastreamento.