Présentation de libSquoosh

Il s'agit de Squoosh, mais en tant que bibliothèque de nœuds.

Nous sommes heureux de vous présenter libSquoosh, une bibliothèque de nœuds expérimentale qui s'appuie sur la CLI Squoosh. Elle vous offre toutes les fonctionnalités de la CLI Squoosh avec une interface idiomatique JavaScript.

Squoosh.app est une PWA qui compresse les images pour vous dans votre navigateur. Il prend en charge de nombreux formats d'image (anciens et nouveaux) et les traite côté client dans le navigateur via WebAssembly. Ainsi, vos photos sont stockées en toute sécurité sur votre propre ordinateur au lieu d'être envoyées vers un serveur quelque part, et Squoosh fonctionne même hors connexion.

Lors du Chrome Dev Summit 2020, nous avons annoncé la version 2 de Squoosh, associée à la CLI Squoosh pour intégrer tous les codecs de Squoosh dans la ligne de commande à l'aide de Node et WebAssembly. Cela vous permet de compresser des dossiers entiers à l'aide d'une seule commande et d'utiliser les CLI pour lui permettre de choisir les paramètres du codec à votre place.

La CLI permet une grande automatisation. Il est donc naturel que les développeurs ont commencé à demander une interface plus idiomatique que l'appel programmatique de la CLI Squoosh via le shell. Anton (@atjn sur GitHub) s'est chargé de cette tâche en séparant le code de la CLI Squoosh en deux parties: le code de l'interface de ligne de commande et la fonctionnalité de base sous-jacente.

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

Notre objectif est de rendre la compression d'images plus accessible aux auteurs d'outils. Nous espérons voir apparaître une intégration dans Webpack, Rollup et d'autres outils de compilation pour nous assurer que vos images sont correctement optimisées pour le Web.

J'aimerais vous dire un grand "merci" à Anton pour le temps qu'il a consacré à Squoosh !

Il est encore tôt pour la CLI Squoosh et libSquoosh, et nous avons encore beaucoup d'idées et de plans à mettre en œuvre. En attendant, essayez libSquoosh ! Sachez toutefois qu'il s'agit d'une version expérimentale et qu'il y a de fortes chances que vous rencontriez des bugs. Si vous avez des questions ou si vous en trouvez, veuillez signaler un problème.

Si vous souhaitez apporter votre contribution à Squoosh, par exemple pour contribuer à la documentation extrêmement sommaire de libSquoosh ou pour toute autre partie de l'application, nous lançons un programme de mentorat pour vous aider à démarrer. Pour en savoir plus, consultez Problème de suivi.