# Comment fonctionne Resizo

## Traitement dans le navigateur

Lorsqu'un utilisateur dépose une image sur Resizo, le fichier est lu en mémoire au moyen des APIs `FileReader` et `Blob`. Le bitmap est décodé en `HTMLImageElement` ou `ImageBitmap`, dessiné sur un `<canvas>` aux dimensions cibles, puis ré-encodé avec `canvas.toBlob()`. Le blob obtenu est proposé en téléchargement via une URL d'objet. Le fichier ne franchit jamais une frontière réseau.

Pour les traitements par lots, Resizo utilise un pool de `Web Worker` afin de traiter plusieurs images en parallèle sans bloquer l'interface, puis assemble les sorties dans un ZIP à l'aide d'un encodeur ZIP côté client. Le ZIP est lui aussi généré en mémoire et téléchargé directement.

## Modèle de confidentialité

- **Aucun envoi.** Aucun point de terminaison côté serveur n'accepte de données d'image.
- **Aucune persistance.** Les images n'existent que dans l'onglet actif du navigateur. Fermer ou actualiser l'onglet les efface.
- **Aucune télémétrie sur le contenu des fichiers.** Resizo ne transmet ni noms de fichiers, ni dimensions, ni métadonnées à un service d'analytique.
- **Fonctionne hors ligne.** Après le premier chargement de la page, le site fonctionne sans connexion réseau.
- **Comportement ouvert.** Tout le traitement est du JavaScript en clair visible dans le code source de la page ; l'activité réseau peut être vérifiée via l'onglet Network des DevTools du navigateur (il reste vide pendant l'édition).

## Formats pris en charge

| Format | Entrée | Sortie | Notes |
| --- | --- | --- | --- |
| JPG / JPEG | Oui | Oui | Avec perte. Idéal pour les photos. Curseur de qualité 1–100. |
| PNG | Oui | Oui | Sans perte. Prend en charge la transparence. Fichiers plus volumineux. |
| WebP | Oui | Oui | Format moderne, ~25–35 % plus léger que JPG à qualité égale. |
| GIF | Oui | Non (export en PNG/JPG/WebP) | La première image est utilisée ; l'animation n'est pas préservée. |
| HEIC / HEIF | Dépend du navigateur | Non | Safari décode nativement ; les autres navigateurs nécessitent une conversion préalable. |
| SVG | Non | Non | Format vectoriel ; redimensionner est un changement de viewBox, pas une opération raster. |

## Qualité et interpolation

Le redimensionnement via la Canvas API est régi par deux réglages que Resizo expose :

- `imageSmoothingEnabled` — défini sur `true` pour les photos afin que les bords soient interpolés ; défini sur `false` pour le pixel art et les captures d'écran, afin de conserver des bords nets.
- `imageSmoothingQuality` — `"high"` est la valeur par défaut, qui sélectionne un noyau de rééchantillonnage d'ordre supérieur (défini par l'implémentation du navigateur, typiquement Lanczos ou bicubique). `"medium"` et `"low"` sacrifient la qualité à la vitesse lors de gros traitements par lots.

Pour les forts redimensionnements à la baisse (plus de ~3×), Resizo effectue le redimensionnement en deux passes afin de réduire l'aliasing. Les sorties JPG et WebP utilisent une valeur de qualité contrôlée par l'utilisateur ; PNG utilise DEFLATE sans perte.
