Представляем libSquoosh

Это Squoosh, но как библиотека Node.

Мы рады представить libSquoosh , экспериментальную библиотеку Node, на основе которой построен интерфейс командной строки Squoosh, предоставляющую вам все возможности интерфейса командной строки Squoosh с идиоматическим интерфейсом JavaScript.

Squoosh.app — это PWA, которое сжимает изображения в браузере. Он поддерживает множество старых и новых форматов изображений и обрабатывает их на стороне клиента в браузере через WebAssembly. Это означает, что ваши фотографии будут безопасно храниться на вашем компьютере, а не отправляться на какой-нибудь сервер, и что Squoosh работает даже в автономном режиме.

На Chrome DevSummit 2020 мы анонсировали Squoosh v2 вместе с интерфейсом командной строки Squoosh, позволяющим перенести все кодеки Squoosh в командную строку с помощью Node и WebAssembly. Это позволяет вам сжимать целые папки с помощью одной команды и использовать интерфейс командной строки , позволяющий выбирать параметры кодека за вас.

CLI обеспечивает значительную автоматизацию, поэтому вполне естественно, что разработчики начали просить более идиоматический интерфейс, чем программный вызов Squoosh CLI через оболочку. Антон (@atjn на GitHub) подошел к этой задаче и разделил код CLI Squoosh на две части: код интерфейса командной строки и базовую функциональность ядра.

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

Наша цель — сделать сжатие изображений более доступным для авторов инструментов. Мы надеемся увидеть интеграцию с Webpack, Rollup и другими инструментами сборки, чтобы обеспечить правильную оптимизацию ваших изображений для Интернета.

Я хотел бы выразить огромное «спасибо» Антону за время, которое он посвятил Squoosh!

Для Squoosh CLI и libSquoosh еще рано, и у нас есть еще много идей и планов, которые мы хотели бы реализовать. А пока попробуйте libSquoosh! Однако помните, что это ранний экспериментальный выпуск и существует большая вероятность столкнуться с некоторыми ошибками. Если вы их найдете или у вас возникнут вопросы, пожалуйста, откройте проблему .

Если вы заинтересованы в том, чтобы внести свой вклад в Squoosh — например, внести свой вклад в крайне скудную документацию по libSquoosh или помочь с любой другой частью приложения — мы запускаем программу наставничества, чтобы помочь вам начать работу. Если вы хотите узнать больше, ознакомьтесь с нашей проблемой отслеживания .