libSquoosh 소개

Squoosh이지만 노드 라이브러리입니다.

실험용 노드 라이브러리인 libSquoosh를 소개하게 되어 기쁘게 생각합니다. 이 라이브러리를 토대로 Squoosh CLI가 빌드되며, JavaScript 관용구 인터페이스를 사용하여 Squoosh CLI의 모든 기능을 사용할 수 있습니다.

Squoosh.app은 브라우저에서 이미지를 압축해 주는 PWA입니다. 다양한 기존 및 새로운 이미지 형식을 지원하며 WebAssembly를 통해 브라우저의 클라이언트 측에서 처리합니다. 즉, 사진이 어딘가의 서버로 전송되지 않고 내 컴퓨터에 안전하게 보관되며 Squoosh는 오프라인일 때도 작동합니다.

Chrome DevSummit 2020에서 Google은 Squoosh v2를 발표했으며, Squoosh CLI와 함께 Node 및 WebAssembly를 사용하여 Squoosh의 모든 코덱을 명령줄에 통합했습니다. 이렇게 하면 명령어 하나로 전체 폴더를 압축하고 CLI를 활용하여 코덱 매개변수를 선택할 수 있습니다.

CLI를 사용하면 많은 자동화가 가능하므로 개발자가 셸을 통해 Squoosh CLI를 프로그래매틱 방식으로 호출하는 것보다 더 관용적인 인터페이스를 요청하기 시작한 것은 자연스러운 일입니다. Anton(GitHub의 @atjn)은 작업에 착수하여 Squoosh CLI 코드를 명령줄 인터페이스 코드와 기본 핵심 기능의 두 부분으로 구분했습니다.

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 CLI와 libSquoosh는 아직 초기 단계이므로, 구현하고 싶은 아이디어와 계획이 더 많이 남아 있습니다. 그동안 libSquoosh를 사용해 보세요. 하지만 이 버전은 초기 실험 버전이며 버그가 발생할 가능성이 높습니다. 이러한 문제를 발견했거나 궁금한 점이 있으면 문제를 여세요.

예를 들어 libSquoosh와 관련된 매우 희소한 문서를 작성하거나 앱의 다른 부분에 도움을 주고자 하는 경우, Squoosh와 관련하여 도움을 주실 수 있도록 Google에서 멘토십 프로그램을 시작하고 있습니다. 자세한 내용은 추적 문제를 참고하세요.