„Dieses Bild komprimieren“ sind vier verschiedene Vorgänge, die sich einen Knopf teilen. Wer weiß, welcher davon Qualität kostet, dem erscheinen die Einstellungen sehr viel weniger rätselhaft.
Schritt eins: Dekodieren
Die komprimierte Datei wird zurück in ein Raster aus Pixeln verwandelt. Browser erledigen das in nativem Code, mit Hardwarebeschleunigung, wo die Plattform sie anbietet, und beherrschen JPEG, PNG, WebP und AVIF – auf Apple-Plattformen zusätzlich HEIC, weil das Betriebssystem diesen Decoder ohnehin mitbringt.
Gegenüber der Datei ist das Dekodieren verlustfrei: Du bekommst genau die Pixel, die die Datei beschreibt. Der Verlust ist schon vorher passiert, als das, was die Datei erzeugt hat, sie kodiert hat.
Schritt zwei: Ausrichtung
Telefonkameras speichern die rohe Ausrichtung des Sensors und dazu ein separates EXIF-Feld, das sagt, wie zu drehen ist. Software, die dieses Feld ignoriert, produziert Fotos, die auf der Seite liegen. Es anzuwenden heißt, das Pixelraster wirklich zu drehen, bevor irgendetwas anderes es anfasst – danach wird das Feld nicht mehr gebraucht, was mit ein Grund dafür ist, dass beim Neukodieren die Metadaten wegfallen.
Schritt drei: Resampling
Lässt sich die Zielgröße bei voller Auflösung nicht erreichen, wird das Bild verkleinert. Hier wird stillschweigend viel wahrgenommene Qualität gewonnen oder verloren. Ein billiger Box-Filter mittelt benachbarte Pixel und macht alles weicher; ein Lanczos-Filter gewichtet eine größere Nachbarschaft und hält Kanten scharf.
Resampling ist wirklich zerstörend – die verworfenen Pixel kommen nicht zurück –, aber es ist oft der am wenigsten zerstörende Weg zu einer kleinen Zielgröße, weil es genau die Details entfernt, an deren Beschreibung der Encoder sonst sein ganzes Budget vergeblich verbrauchen würde.
Schritt vier: Kodieren
Der verlustbehaftete Teil. JPEG rechnet in eine Darstellung aus Helligkeit und Farbe um, verwirft einen Teil der Farbauflösung (das Auge merkt es kaum), zerlegt das Bild in Blöcke von 8×8 Pixeln, überführt jeden in Frequenzanteile und quantisiert dann – rundet also die hochfrequenten Details weg. Der Qualitätsparameter ist die Grobheit dieser Rundung. Alles danach ist verlustfreie Entropiekodierung, weshalb eine optimierte Huffman-Tabelle oder ein progressiver Aufbau Bytes umsonst spart.
Wo WebAssembly ins Spiel kommt
Der eingebaute Encoder des Browsers ist eine Blackbox: Du kannst eine Qualitätszahl verlangen und sonst nichts. Keine optimierten Entropietabellen, keine Wahl zwischen Baseline und progressiv, keine Kontrolle über den Resampling-Filter und keine Möglichkeit zu erfahren, wie viele Bytes eine Einstellung ergibt, ohne sie auszuprobieren.
Ein nach WebAssembly kompilierter Codec gibt all das zurück – zum Preis der Bytes, die sein Download kostet. ToolZool fährt die ganze Kette so: Dekodieren, Ausrichtung, Resampling und Kodieren sind Rust, kompiliert nach WebAssembly, in einem Hintergrund-Worker – statt das Dekodieren dem Browser zu überlassen. Dafür gibt es drei ganz praktische Gründe:
- Die Suche braucht viele Durchgänge. Eine exakte Größe zu treffen heißt, dasselbe Bild fünf- oder sechsmal zu kodieren. Den Encoder selbst zu besitzen macht das billig und wiederholbar.
- Ein Decoder muss Nein sagen können. Eine Datei, die 60.000 × 60.000 Pixel angibt, muss abgelehnt werden, bevor sie Speicher belegt, und eine abgeschnittene Datei muss scheitern, statt ein halbes Bild zurückzugeben. Der Decoder des Browsers entscheidet das selbst; unserer benennt die Grenzen und setzt sie durch.
- Dieselbe Eingabe muss dieselbe Ausgabe ergeben. Browser-Decoder unterscheiden sich in der Farbbehandlung und im Umgang mit fehlerhaften Dateien. Eine Kette, der beide Enden gehören, erzeugt auf jedem Gerät dieselben Bytes – und genau das macht ein Ergebnis überprüfbar.
Der Preis wird offen genannt: Diese Engine ist ein Download. Sie wird erst geholt, wenn du eine Datei auswählst, das Lesen einer Seite wie dieser bezahlt sie also nie.
Warum die Suche mehr zählt als der Codec
Bei vorgegebener Zieldateigröße liegen zwischen einem guten und einem hervorragenden Encoder ein paar Prozent. Zwischen dem Raten an einem Qualitätsregler und dem Suchen nach dem richtigen Wert liegt sehr viel mehr, denn ein Rateversuch, der bei 60 % deines Kontingents landet, hat ein Drittel der Qualität weggeworfen, die dir zugestanden hätte. Das ist der ganze Gedanke hinter dem Komprimieren auf eine exakte Größe, und ein 50-KB-Limit treffen zeigt, was die Suche am schwierigsten Ende dieser Skala einbringt.

