# So funktioniert Resizo

## Verarbeitung im Browser

Wenn ein Nutzer ein Bild auf Resizo ablegt, wird die Datei mit den APIs `FileReader` und `Blob` in den Speicher gelesen. Die Bitmap wird in ein `HTMLImageElement` oder `ImageBitmap` dekodiert, in den Zielabmessungen auf ein `<canvas>` gezeichnet und mit `canvas.toBlob()` neu kodiert. Das resultierende Blob wird über eine Object-URL als Download bereitgestellt. Die Datei überschreitet niemals eine Netzwerkgrenze.

Für Batch-Aufträge nutzt Resizo einen `Web Worker`-Pool, um mehrere Bilder parallel zu verarbeiten, ohne die UI zu blockieren, und fügt die Ergebnisse dann mit einem clientseitigen ZIP-Encoder zu einem ZIP zusammen. Das ZIP wird ebenfalls im Speicher erzeugt und direkt heruntergeladen.

## Datenschutzmodell

- **Kein Upload.** Es gibt keinen serverseitigen Endpunkt, der Bilddaten entgegennimmt.
- **Keine Persistenz.** Bilder existieren nur im aktiven Browser-Tab. Schließen oder Neuladen des Tabs entfernt sie.
- **Keine Telemetrie zum Dateiinhalt.** Resizo übermittelt weder Dateinamen noch Abmessungen oder Metadaten an irgendeinen Analysedienst.
- **Funktioniert offline.** Nach dem ersten Seitenladen funktioniert die Seite auch ohne Netzwerkverbindung.
- **Offenes Verhalten.** Die gesamte Verarbeitung ist reines JavaScript, sichtbar im Quelltext der Seite; die Netzwerkaktivität lässt sich mit dem Network-Tab der DevTools des Browsers überprüfen (er bleibt während der Bearbeitung leer).

## Unterstützte Formate

| Format | Eingabe | Ausgabe | Hinweise |
| --- | --- | --- | --- |
| JPG / JPEG | Ja | Ja | Verlustbehaftet. Am besten für Fotos. Qualitätsregler 1–100. |
| PNG | Ja | Ja | Verlustfrei. Unterstützt Transparenz. Größere Dateien. |
| WebP | Ja | Ja | Modernes Format, ~25–35 % kleiner als JPG bei gleicher Qualität. |
| GIF | Ja | Nein (Export als PNG/JPG/WebP) | Es wird der erste Frame verwendet; Animationen werden nicht beibehalten. |
| HEIC / HEIF | Browserabhängig | Nein | Safari dekodiert nativ; andere Browser erfordern eine vorherige Konvertierung. |
| SVG | Nein | Nein | Vektorformat; Größenänderung ist eine viewBox-Änderung, keine Rasteroperation. |

## Qualität und Interpolation

Das Skalieren über die Canvas API wird von zwei Einstellungen gesteuert, die Resizo bereitstellt:

- `imageSmoothingEnabled` — bei Fotos auf `true` gesetzt, damit Kanten interpoliert werden; für Pixel-Art und Screenshots auf `false`, um harte Kanten knackig zu halten.
- `imageSmoothingQuality` — `"high"` ist der Standard und wählt einen Resampling-Kernel höherer Ordnung (von der Browser-Implementierung definiert, typischerweise Lanczos oder bikubisch). `"medium"` und `"low"` tauschen bei großen Batch-Aufträgen Qualität gegen Geschwindigkeit.

Bei starker Verkleinerung (mehr als ~3×) führt Resizo das Skalieren in zwei Durchgängen aus, um Aliasing zu reduzieren. JPG- und WebP-Ausgaben verwenden einen vom Nutzer steuerbaren Qualitätswert; PNG nutzt verlustfreies DEFLATE.
