Giới thiệu libSquoosh

Đó là Squoosh, nhưng là một thư viện Nút.

Chúng tôi rất vui được giới thiệu libSquoosh, một thư viện Nút thử nghiệm mà trên đó Squoosh CLI được xây dựng, cung cấp cho bạn tất cả các tính năng cho Squoosh CLI với giao diện tương thích với JavaScript.

Squoosh.app là một PWA nén hình ảnh cho bạn trong trình duyệt. Công cụ này hỗ trợ nhiều định dạng hình ảnh cũ và mới, đồng thời xử lý các định dạng đó ở phía máy khách trong trình duyệt thông qua WebAssembly. Điều này có nghĩa là ảnh của bạn luôn an toàn trên máy tính của bạn thay vì bị gửi đến máy chủ ở một nơi nào đó và Squoosh vẫn hoạt động ngay cả khi ngoại tuyến.

Tại Chrome DevSummit 2020, chúng tôi đã công bố Squoosh v2, cùng với Squoosh CLI để đưa tất cả các bộ mã hoá và giải mã của Squoosh vào dòng lệnh bằng cách sử dụng Node và WebAssembly. Tính năng này cho phép bạn nén toàn bộ thư mục bằng một lệnh và tận dụng CLI để cho phép thư mục này chọn tham số bộ mã hoá và giải mã cho bạn.

CLI kích hoạt rất nhiều tự động hoá và vì vậy, chỉ có điều các nhà phát triển bắt đầu yêu cầu một giao diện đặc trưng hơn so với gọi Squoosh CLI theo phương thức lập trình qua shell. Anton (@atjn trên GitHub) đã bắt tay vào thực hiện nhiệm vụ này và tách mã Squoosh CLI thành hai phần: Mã giao diện dòng lệnh và chức năng cốt lõi cơ bản.

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

Mục tiêu của chúng tôi là giúp các tác giả sử dụng công cụ dễ tiếp cận hơn. Chúng tôi hy vọng có thể tích hợp vào Webpack, Rollup và các công cụ xây dựng khác để đảm bảo hình ảnh của bạn được tối ưu hoá phù hợp cho web.

Tôi muốn gửi lời cảm ơn chân thành đến Anton vì anh ấy đã dành thời gian cho Squoosh!

Vẫn còn sớm để Squoosh CLI và libSquoosh xây dựng. Chúng tôi còn nhiều ý tưởng và kế hoạch khác mà chúng tôi muốn thực hiện. Trong lúc chờ đợi, hãy thử dùng libSquoosh! Tuy nhiên, xin lưu ý rằng đây là bản phát hành thử nghiệm ở giai đoạn sớm và vẫn có khả năng bạn sẽ gặp phải một số lỗi. Nếu bạn phát hiện một số vấn đề hoặc có thắc mắc, hãy mở một vấn đề.

Nếu bạn muốn đóng góp cho Squoosh (ví dụ: đóng góp vào tài liệu cực kỳ thưa thớt về libSquoosh hoặc trợ giúp bất kỳ phần nào khác của ứng dụng), chúng tôi sẽ bắt đầu chương trình cố vấn để giúp bạn bắt đầu. Nếu bạn muốn biết thêm, hãy xem vấn đề khi theo dõi.