# Como o Resizo funciona

## Processamento no navegador

Quando um usuário solta uma imagem no Resizo, o arquivo é lido na memória usando as APIs `FileReader` e `Blob`. O bitmap é decodificado em um `HTMLImageElement` ou `ImageBitmap`, desenhado em um `<canvas>` nas dimensões de destino e re-codificado com `canvas.toBlob()`. O blob resultante é disponibilizado como download por meio de uma object URL. O arquivo nunca atravessa uma fronteira de rede.

Para trabalhos em lote, o Resizo usa um pool de `Web Worker` para processar várias imagens em paralelo sem bloquear a UI, e então monta as saídas em um ZIP usando um codificador ZIP do lado do cliente. O ZIP também é gerado em memória e baixado diretamente.

## Modelo de privacidade

- **Sem upload.** Não existe nenhum endpoint do lado do servidor que aceite dados de imagem.
- **Sem persistência.** As imagens existem apenas na aba ativa do navegador. Fechar ou atualizar a aba as remove.
- **Sem telemetria sobre o conteúdo do arquivo.** O Resizo não transmite nomes de arquivos, dimensões nem metadados a nenhum serviço de analytics.
- **Funciona offline.** Após o primeiro carregamento da página, o site funciona sem conexão de rede.
- **Comportamento aberto.** Todo o processamento é JavaScript puro visível no código-fonte da página; a atividade de rede pode ser verificada na aba Network do DevTools do navegador (ela permanece vazia durante a edição).

## Formatos suportados

| Formato | Entrada | Saída | Observações |
| --- | --- | --- | --- |
| JPG / JPEG | Sim | Sim | Com perda. Ideal para fotos. Controle de qualidade 1–100. |
| PNG | Sim | Sim | Sem perda. Suporta transparência. Arquivos maiores. |
| WebP | Sim | Sim | Formato moderno, ~25–35% menor que JPG com qualidade equivalente. |
| GIF | Sim | Não (exporta como PNG/JPG/WebP) | Usa-se o primeiro quadro; a animação não é preservada. |
| HEIC / HEIF | Depende do navegador | Não | O Safari decodifica nativamente; outros navegadores exigem conversão prévia. |
| SVG | Não | Não | Formato vetorial; redimensionar é uma mudança de viewBox, não uma operação raster. |

## Qualidade e interpolação

O redimensionamento na Canvas API é governado por duas configurações que o Resizo expõe:

- `imageSmoothingEnabled` — defina como `true` para fotos, de modo que as bordas sejam interpoladas; defina como `false` para pixel art e capturas de tela, para manter bordas duras nítidas.
- `imageSmoothingQuality` — `"high"` é o padrão, que seleciona um kernel de reamostragem de ordem superior (definido pela implementação do navegador, tipicamente Lanczos ou bicúbico). `"medium"` e `"low"` trocam qualidade por velocidade em grandes trabalhos em lote.

Para reduções grandes (mais de ~3×), o Resizo realiza o redimensionamento em duas passagens para reduzir o aliasing. As saídas JPG e WebP usam um valor de qualidade controlado pelo usuário; PNG usa DEFLATE sem perda.
