Base64 ist Kodierung, keine Bildkompression
Standard-Base64 stellt je drei Bytes mit vier Zeichen dar: exakt 4 × ceil(n / 3), langfristig etwa 33,3% mehr. Eine Data URL ergänzt noch den MIME-Präfix.
Das Werkzeug verkleinert zuerst die Bilddaten: dekodieren, bei Bedarf Abmessungen, Qualität oder Format ändern und anschließend wieder Standard-Base64 erzeugen.
Gzip erzeugt ein anderes Format
Gzip über Base64 ergibt komprimierte Binärdaten, die vor der Anzeige entpackt werden müssen. Erneutes Base64 macht daraus keine normale Bild-Data-URL.
JPEG, PNG und WebP sind bereits komprimiert. Weniger Pixel, verlustbehaftete Qualität, entfernte Metadaten oder ein anderes Format können helfen, garantieren aber weder Verlustfreiheit noch Einsparung.
Zielgröße ohne größeres Ergebnis
Für JPEG und WebP wird die Qualität mit fester Obergrenze gesucht. Reicht das nicht, werden die Abmessungen in begrenzten Runden bei gleichem Seitenverhältnis reduziert.
Sinkt die Zahl der Standard-Base64-Zeichen nicht, bleiben die Originalbytes erhalten. Ein kleineres Ergebnis, das das KB-Ziel verfehlt, wird eindeutig markiert.
Lokal und mit klaren Formatgrenzen
Alles bleibt im Browser-Tab; keine Uploads, entfernten URLs, Telemetrie oder Bildbibliotheken. Grenzen: 20 MiB dekodiert und 16 Megapixel.
SVG, GIF, ICO und animiertes WebP werden abgelehnt statt ausgeführt oder auf den ersten Frame reduziert. Auto schützt Transparenz; JPEG braucht eine bestätigte Hintergrundfarbe. Canvas ist kein Malware-Scan.
Wann Base64 ungeeignet ist
Für kleine eingebettete Assets ist es praktisch. Große Bilder sollten meist Blob URLs, separate Dateien oder Binär-Uploads bleiben, damit Cache und Übertragung unabhängig funktionieren.
Bildbytes und Base64-Zeichen werden getrennt verglichen. Das Entfernen des data:-Präfixes zählt nicht als Kompression.
Häufige Fehler und Ursachen
- Ungültige Base64-Zeichen, Padding oder Länge.
- Der deklarierte MIME-Typ widerspricht den Magic Bytes.
- Mehr als 20 MiB, 16 Megapixel oder fehlgeschlagene Browser-Dekodierung.
- Animation, mehrere Frames, SVG oder ein bereits optimal komprimiertes Bild.
Entsprechende Befehle
Nutze eine vorhandene Laufzeit oder Shell. Prüfe fremde Eingaben und gib Binärdaten nicht direkt im Terminal aus.
Python
from PIL import Image
from io import BytesIO
import base64
image = Image.open(BytesIO(base64.b64decode(value)))
out = BytesIO(); image.save(out, 'WEBP', quality=82)
result = base64.b64encode(out.getvalue()).decode('ascii')
JavaScript
const blob = new Blob([bytes], { type: mime });
const bitmap = await createImageBitmap(blob);
ctx.drawImage(bitmap, 0, 0, width, height);
const output = await new Promise(r => canvas.toBlob(r, 'image/webp', 0.82));
bitmap.close();
Shell
printf '%s' "$VALUE" | base64 --decode > input.png
magick input.png -resize '1920x1920>' -quality 82 output.webp
base64 --wrap=0 output.webp
Standards und offizielle Referenzen
FAQ zur Base64-Bildkompression
Kann Base64 selbst komprimiert werden?
Ja, aber allgemeine Kompression erzeugt ein anderes Binärformat. Für Standard-Bild-Base64 müssen die Bildbytes optimiert und neu kodiert werden.
Funktioniert das Ergebnis direkt in img src?
Ja. Raw ist Standard-Base64 und die Data URL ist ein normales data:image/...;base64-Format.
Wie erreiche ich 100 KB?
Wähle Custom und 100 KB. Das Werkzeug sucht begrenzt über Qualität und Abmessungen; nicht jedes Bild kann das Ziel erreichen.
Sinkt die Qualität?
Möglicherweise. Skalierung und JPEG/WebP-Qualität sind verlustbehaftet. PNG-Neukodierung kann größer bleiben.
Warum rund 33% mehr?
Drei Bytes werden zu vier Zeichen. Exakt gilt 4 × ceil(n / 3).
Wird das Bild hochgeladen?
Nein. Analyse, Canvas, Vorschau, Kopieren und Download laufen lokal.
Gzip vor oder nach Base64?
Für Übertragung kann die äußere HTTP-Antwort komprimiert werden. Gzip ist ohne Entpacken keine verwendbare Bild-Data-URL.