Der Bildkompressor liest eine lokale Bilddatei, kodiert sie auf einem Canvas neu als JPEG und zeigt die Größenänderung, bevor du etwas herunterlädst. Du wählst die Datei im Dateiauswahlfeld, die Seite zeichnet sie in ihren Originalmaßen und das Canvas kodiert sie mit der Qualität des Reglers neu, die standardmäßig bei 70 liegt. Die Anzeige gibt danach die Originalgröße, die geschätzte komprimierte Größe und den Prozentsatz aus, zum Beispiel 2,400,000B → 833,351B (-65 %), und eine Vergleichsvorschau zeigt das Original neben dem Ergebnis. Alles ist ein Canvas-Aufruf im Browser: die Byte der Datei verlassen das Gerät niemals, und an keiner Stelle findet ein Hochladen statt.
Was das Werkzeug nimmt und was es gibt
Die Eingabe ist ein einzelnes Dateifeld, das Bilddateien annimmt, und es wird nichts weiter verlangt. Die Originalgröße ist die genaue Bytezahl der Datei auf der Platte, also ist die linke Hälfte der Anzeige exakt. Die Ausgabe ist immer ein JPEG: das Canvas übergibt seine Pixel dem JPEG-Encoder des Browsers, das Ausgabeformat ist fest und nicht wählbar, und Breite und Höhe bleiben genau so, wie sie waren. Die einzige Regelung ist der Qualitätsregler, der von 10 bis 95 in Schritten von 5 geht, also 18 Stufen hat, und beim Bewegen kodiert er das aufbewahrte Original sofort neu, so dass Anzeige und Vorschau live aktualisiert werden. Wenn die Größe stimmt, schreibt der Download-Knopf das Ergebnis auf deine Platte als compressed.jpg; die Datei, die du speicherst, ist die Wahrheit für die tatsächliche Bytezahl.
Warum die Ausgabe immer JPEG ist
Die Neukodierung ist ein einziger Canvas-Aufruf, dessen Ausgabetype auf JPEG festgesetzt ist, also geht ein PNG hinein und ein JPEG hinaus, ein WebP hinein und ein JPEG hinaus, und ein GIF hinein und behält nur seinen ersten Frame, weil das Bild-Element nur den ersten Frame einer animierten Datei entschlüsselt. Das feste Format hat zwei Folgen. Erstens hat JPEG keinen Alphakanal, also bleibt ein transparentes PNG nicht transparent: die transparenten Pixel werden vor dem Kodieren über Schwarz gemischt, und die Datei, die du herunterlädst, hat an den Stellen Schwarz, wo die Eingabe Transparenz hatte. Zweitens benutzt das Werkzeug den eigenen Dekoder des Browsers ohne Ersatz, also ein Format, das der Browser nicht entschlüsseln kann, etwa HEIC auf den meisten Plattformen, endet schlicht nie mit der Entschlüsselung, und die Seite rendert dafür nichts.
Wie die Größe abgelesen wird
Die komprimierte Größe ist eine Schätzung, und eine bewusst einfache. Das Canvas liefert eine Data-URL, ein 23 Zeichen langes Präfix data:image/jpeg;base64, gefolgt von Base64, und die Seite nimmt die Länge der ganzen Zeichenkette und multipliziert sie mit drei Vierteln, weil Base64 vier Zeichen für jeweils drei Byte verwendet. Diese Schätzung übersteigt die wahre Bytezahl allein wegen des Präfixes, was auf 17 bis 19 Byte zu viel kommt: ein JPEG mit 1,000,000 Byte liest sich als 1,000,019B, und eines mit 999,999 Byte als 1,000,016B. In einem kompletten Durchlauf gibt eine Datei mit 2,400,000B, deren Encoder-Ausgabe 833,333 Byte misst, 2,400,000B → 833,351B (-65 %) aus; der Prozentsatz wird gerundet, also können angezeigte Zahl und exakte Rechnung um einen Punkt abweichen.
Wenn die Datei größer wird
Die Ersparnis in Prozent ist das Runden von eins minus die komprimierte Größe geteilt durch die Originalgröße, mal hundert, und ein negatives Ergebnis wird mit Plus angezeigt, also wird eine gewachsene Datei gemeldet wie zum Beispiel 45,000B → 47,018B (+4 %). Das passiert bei kleinen Bildern, wo der fixe Overhead des Encoders dominiert, bei einem JPEG, das bereits auf eine Qualität gleich oder unter der gewählten komprimiert war, und jedes Mal, wenn der Regler über der Qualität liegt, mit der die Originaldatei gespeichert wurde. Die Richtung ist kein Fehler: Bei 10 ist die Ausgabe so klein wie nur möglich, bei 95 so groß, und wenn die Anzeige steigt, während du die Qualität hochführst, war das Original bereits schlanker, als der Encoder es gern hätte.
Wohin die Pixel gehen
Die Datei wird mit FileReader als Data-URL in der Seite gelesen, und die einzige Rechnung ist die Canvas-Zeichnung plus die JPEG-Kodierung, also verlassen die Byte das Gerät nie, und an keiner Stelle findet eine Netzwerkanfrage statt. Auch Persistenz gibt es nicht: Die Seite hält die Data-URL nur, solange sie offen ist, es gibt kein Verzeichnis und keinen Zwischenspeicher, und Schließen oder Neuladen des Tabs wirft das Bild und das Ergebnis weg. Das einzige Ergebnis, das das Gerät verlassen kann, ist das compressed.jpg, das du zum Herunterladen wählst, und das wählst du selbst.
Was es nicht ist
Das Werkzeug behält die Eingabemaße genau bei, also ist es kein Resizer; das Ändern der Pixelgröße macht die Bild-Größenänderung. Auch kein Formatkonverter, denn die Ausgabe ist auf JPEG festgesetzt; das Wählen des Ausgabeformats ist die Aufgabe des Bild-Konverters. Es liest und zeigt auch keine Metadaten der Datei, die der Bild-Info-Anzeiger zeigt, und es schneidet den Bildausschnitt nicht; dafür gibt es den Zuschneide-Guide.