Por que uma foto restaurada pode ser um arquivo maior que a digitalização
Uma observação de usuário deu início a esta nota: o download restaurado era maior que a foto enviada, o que intuitivamente parece errado para um “reparo”. A medição encontrou duas causas independentes: uma é o produto funcionando como planejado, a outra era desperdício genuíno que então removemos.
Causa 1: a saída realmente carrega ~6× os pixels
A restauração inclui o aprimoramento da imagem inteira: uma digitalização típica de 821×1024 (0.84 megapixels) volta em 2052×2560 (5.25 megapixels), 6.25× a contagem de pixels, com detalhe sintetizado de verdade nesses pixels, não cópias esticadas. Mais informação, mais bytes. Esta parte é o recurso.
Causa 2: os codificadores PNG dos navegadores são 20–40% inchados
A parte do desperdício: o app originalmente codificava os downloads no navegador com o codificador PNG embutido na API do canvas. Comparado a um codificador otimizador de verdade nos ajustes máximos sem perdas, o codificador do canvas produzia arquivos 20–40% maiores para uma saída de pixels idênticos. PNG é sem perdas de qualquer forma; os bytes extras não compravam nada.
O servidor agora codifica o PNG do resultado uma vez, na compressão máxima sem perdas, e o cliente reutiliza esses bytes exatos para o download em vez de recodificar pelo canvas. A reutilização é correta por construção: o blob baixado é o mesmo a partir do qual o canvas foi pintado, então os pixels não podem diferir.
O que deliberadamente não fizemos
Não acrescentamos formatos de saída com perdas para perseguir um número menor. Uma restauração é uma cópia de arquivo, então o botão de download entrega PNG e nada mais; não sobrou nenhum ganho sem perdas gratuito para colher em JPEG ou WebP. E as fotos processadas no modo de reserva no dispositivo mantêm o codificador do navegador; essas execuções nunca tocam os nossos servidores.
Conclusão prática
Se o seu arquivo restaurado é maior que a sua digitalização, confira as dimensões em pixels antes de presumir desperdício: com 6× os pixels, um arquivo um pouco maior é o resultado esperado, e um menor significaria que detalhe foi jogado fora.