Apresentação do libSquoosh

É o Squoosh, mas como uma biblioteca Node.

Temos o prazer de apresentar o libSquoosh, uma biblioteca experimental de nós com base na qual a CLI Squoosh foi criada. Ela oferece a você todos os recursos da CLI Squoosh com uma interface idiomática para JavaScript.

O Squoosh.app é um PWA que compacta imagens para você no navegador. Ele é compatível com muitos formatos de imagem novos e antigos e os processa do lado do cliente no navegador por meio do WebAssembly. Isso significa que as suas imagens ficam seguras no seu computador em vez de serem enviadas para um servidor para algum lugar e que o Squoosh funciona mesmo quando estiver off-line.

No Chrome DevSummit 2020, anunciamos o Squoosh v2 junto com a Squoosh CLI para integrar todos os codecs do Squoosh à linha de comando usando o Node e o WebAssembly. Dessa forma, é possível compactar pastas inteiras com um só comando e usar as CLIs para escolher os parâmetros do codec.

A CLI permite muita automação e, por isso, é natural que os desenvolvedores tenham começado a pedir uma interface mais idiomática do que invocar programaticamente a CLI 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 subjacente.

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 para os autores de ferramentas. Esperamos ver a integração com o Webpack, o Rollup e outras ferramentas de compilação para garantir que suas imagens estejam otimizadas para a Web.

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

A CLI Squoosh e o libSquoosh ainda estão cedo, e temos muitas outras ideias e planos que gostaríamos de implementar. Enquanto isso, experimente o libSquoosh! No entanto, esteja ciente de que essa é uma versão experimental inicial e que você provavelmente encontrará alguns bugs. Se você encontrar alguns ou tiver dúvidas, abra um problema.

Se você tem interesse em contribuir com o Squoosh, por exemplo, com uma documentação muito esparsa sobre o libSquoosh ou para ajudar com outros recursos do app, estamos iniciando um programa de mentoria para ajudar você a começar. Para saber mais, confira nosso problema de rastreamento.