# Cómo funciona Resizo

## Procesamiento en el navegador

Cuando un usuario suelta una imagen en Resizo, el archivo se lee en memoria mediante las APIs `FileReader` y `Blob`. El bitmap se decodifica en un `HTMLImageElement` o `ImageBitmap`, se dibuja en un `<canvas>` con las dimensiones de destino y se vuelve a codificar con `canvas.toBlob()`. El blob resultante se ofrece como descarga mediante una URL de objeto. El archivo nunca cruza un límite de red.

Para trabajos por lotes, Resizo utiliza un grupo de `Web Worker` para procesar varias imágenes en paralelo sin bloquear la UI, y luego ensambla las salidas en un ZIP mediante un codificador ZIP del lado del cliente. El ZIP también se genera en memoria y se descarga directamente.

## Modelo de privacidad

- **Sin subidas.** No existe ningún endpoint del lado del servidor que acepte datos de imagen.
- **Sin persistencia.** Las imágenes viven solo en la pestaña activa del navegador. Cerrar o recargar la pestaña las borra.
- **Sin telemetría sobre el contenido del archivo.** Resizo no transmite nombres de archivo, dimensiones ni metadatos a ningún servicio de analítica.
- **Funciona sin conexión.** Tras la primera carga de la página, el sitio funciona con la red desconectada.
- **Comportamiento abierto.** Todo el procesamiento es JavaScript plano visible en el código fuente de la página; la actividad de red se puede verificar con la pestaña Network de las DevTools del navegador (permanece vacía durante la edición).

## Formatos compatibles

| Formato | Entrada | Salida | Notas |
| --- | --- | --- | --- |
| JPG / JPEG | Sí | Sí | Con pérdida. Ideal para fotos. Control de calidad 1–100. |
| PNG | Sí | Sí | Sin pérdida. Admite transparencia. Archivos más grandes. |
| WebP | Sí | Sí | Formato moderno, ~25–35 % más pequeño que JPG con la misma calidad. |
| GIF | Sí | No (exporta como PNG/JPG/WebP) | Se usa el primer cuadro; no se preserva la animación. |
| HEIC / HEIF | Depende del navegador | No | Safari decodifica de forma nativa; otros navegadores requieren conversión previa. |
| SVG | No | No | Formato vectorial; redimensionar es un cambio de viewBox, no una operación raster. |

## Calidad e interpolación

El redimensionado en la Canvas API se rige por dos ajustes que Resizo expone:

- `imageSmoothingEnabled` — establecido en `true` para fotos, de modo que los bordes se interpolen; establecido en `false` para pixel art y capturas de pantalla, para mantener los bordes duros nítidos.
- `imageSmoothingQuality` — `"high"` es el valor por defecto, que selecciona un kernel de remuestreo de orden superior (definido por la implementación del navegador, normalmente Lanczos o bicúbico). `"medium"` y `"low"` intercambian calidad por velocidad durante trabajos por lotes grandes.

Para reducciones grandes (más de ~3×), Resizo realiza el redimensionado en dos pasadas para reducir el aliasing. La salida JPG y WebP usa un valor de calidad controlado por el usuario; PNG usa DEFLATE sin pérdida.
