Jetzt neu: libSquoosh

Es ist Squoosh, aber als Knotenbibliothek.

Wir freuen uns, libSquoosh vorzustellen, eine experimentelle Knotenbibliothek, auf der die Squoosh-Befehlszeile erstellt wird. Sie bietet Ihnen alle Funktionen der Squoosh-Befehlszeile mit einer JavaScript-idiomatischen Benutzeroberfläche.

Squoosh.app ist eine PWA, mit der Bilder für Sie im Browser komprimiert werden. Es unterstützt viele alte und neue Bildformate und verarbeitet sie clientseitig im Browser über WebAssembly. Das bedeutet, dass Ihre Bilder sicher auf Ihrem eigenen Computer gespeichert werden und nicht irgendwo an einen Server gesendet werden. Außerdem funktioniert Squoosh auch dann, wenn Sie offline sind.

Auf dem Chrome DevSummit 2020 haben wir Squoosh v2 und die Squoosh CLI vorgestellt, um alle Codecs von Squoosh mithilfe von Node und WebAssembly in die Befehlszeile zu bringen. So können Sie ganze Ordner mit einem Befehl komprimieren und die Codec-Parameter über die Befehlszeile auswählen lassen.

Die Befehlszeile ermöglicht eine Menge Automatisierung. Daher ist es nur logisch, dass Entwickler nach einer idiomatischeren Schnittstelle gefragt haben, als die Squoosh-Befehlszeile programmatisch über die Shell aufzurufen. Anton (@atjn auf GitHub) machte sich zur Aufgabe und teilte den Code der Squoosh-Befehlszeile in zwei Teile auf: den Befehlszeilencode und die zugrunde liegende Hauptfunktion.

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

Unser Ziel ist es, die Bildkomprimierung für Tool-Autoren zugänglicher zu machen. Wir hoffen, dass die Integration in Webpack, Rollup und andere Build-Tools möglich ist, damit Ihre Bilder für das Web angemessen optimiert werden.

Ich möchte Anton ein herzliches Dankeschön für die Zeit ausdrücken, die er sich für Squoosh engagiert hat!

Für die Squoosh CLI und libSquoosh ist es noch früh und wir haben noch viele weitere Ideen und Pläne, die wir umsetzen möchten. Probieren Sie in der Zwischenzeit libSquoosh! Beachten Sie jedoch, dass es sich um eine experimentelle Version handelt und die Wahrscheinlichkeit groß ist, dass Fehler auftreten. Wenn Sie einige finden oder Fragen haben, erstellen Sie ein Problem.

Wenn du Interesse hast, etwas für Squoosh mitzuwirken, zum Beispiel zu der extrem übersichtlichen Dokumentation zu libSquoosh oder zu anderen Teilen der App, dann starten wir ein Mentoring-Programm, das dir den Einstieg erleichtert. Weitere Informationen finden Sie unter Probleme mit der Sendungsverfolgung.