Présentation de libSquoosh

Il s'agit de Squoosh, mais en tant que bibliothèque Node.

Nous sommes heureux de vous présenter libSquoosh, une bibliothèque Node expérimentale sur laquelle repose 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 le navigateur. Il accepte de nombreux formats d'images anciens et nouveaux, et les traite côté client dans le navigateur via WebAssembly. Cela signifie que 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 que Squoosh fonctionne même hors connexion.

Lors du DevSummit 2020 sur Chrome, nous avons annoncé Squoosh v2, ainsi que la CLI Squoosh pour transférer tous les codecs de Squoosh dans la ligne de commande à l'aide de Node et de WebAssembly. Cela vous permet de compresser des dossiers entiers à l'aide d'une seule commande et d'utiliser la CLI pour lui permettre de choisir les paramètres de codec à votre place.

La CLI permet de nombreuses automatisations. Il est donc normal que les développeurs aient commencé à demander une interface plus idiomatique que d'appeler par programmation la CLI Squoosh via le shell. Anton (@atjn sur GitHub) s'est lancé dans cette tâche et a séparé 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 l'intégration dans Webpack, Rollup et d'autres outils de compilation pour s'assurer que vos images sont correctement optimisées pour le Web.

Je voudrais exprimer un immense "merci" à Anton pour le temps qu'il s'est engagé dans Squoosh !

Il est encore trop tôt pour la CLI Squoosh et libSquoosh et nous avons beaucoup d'autres idées et plans que nous aimerions mettre en œuvre. En attendant, essayez libSquoosh ! Toutefois, gardez à l'esprit qu'il s'agit d'une version expérimentale expérimentale et que vous risquez de rencontrer des bugs. Si vous avez des questions ou si vous en trouvez, veuillez signaler un problème.

Si vous souhaitez contribuer à Squoosh, par exemple pour contribuer à la documentation extrêmement sommaire de libSquoosh ou pour apporter une aide sur d'autres parties de l'application, nous lançons un programme de mentorat pour vous aider à démarrer. Pour en savoir plus, consultez notre article sur les problèmes de suivi.