Blog / Ingeniería

Por qué una foto restaurada puede pesar más que el escaneo

· informe de medición · datos: comparación de codificadores en producción

Esta nota empezó con la observación de un usuario: la descarga restaurada pesaba más que la foto que había subido, lo que intuitivamente parece incorrecto para una “reparación”. La medición encontró dos causas independientes: una es el producto funcionando como debe; la otra era un desperdicio real que después eliminamos.

Causa 1: la salida realmente tiene ~6× los píxeles

La restauración incluye la mejora de la imagen entera: un escaneo típico de 821×1024 (0.84 megapíxeles) vuelve a 2052×2560 (5.25 megapíxeles), 6.25× la cantidad de píxeles, con detalle real sintetizado en esos píxeles, no copias estiradas. Más información, más bytes. Esta parte es la función.

8211024
Subida0.84 MP
20522560
Salida restaurada5.25 MP
Figura 1. Entrada y salida de la misma restauración, dibujadas a escala. La salida tiene 6.25× los píxeles de la subida.

Causa 2: los codificadores PNG del navegador están hinchados un 20–40%

La parte desperdiciada: la aplicación codificaba originalmente las descargas en el navegador con el codificador PNG integrado de la API de canvas. Comparado con un codificador optimizador de verdad a la máxima configuración sin pérdidas, el codificador del canvas producía archivos un 20–40% más grandes para una salida de píxeles idénticos. PNG es sin pérdidas en ambos casos; los bytes de más no compraban nada.

Figura 2. Los mismos píxeles restaurados, codificados de dos maneras. La codificación a máxima compresión con filtrado adaptativo recortó el archivo un 45% sin ninguna diferencia de calidad; PNG es sin pérdidas en ambos casos.

El servidor codifica ahora el PNG resultante una sola vez a máxima compresión sin pérdidas, y el cliente reutiliza esos mismos bytes para la descarga en lugar de volver a codificar a través del canvas. La reutilización es correcta por construcción: el blob descargado es el mismo con el que se pintó el canvas, así que los píxeles no pueden diferir.

Lo que deliberadamente no hicimos

No añadimos formatos de salida con pérdidas para perseguir un número más pequeño. Una restauración es una copia de archivo, así que el botón de descarga te entrega PNG y nada más; no queda ninguna ganancia sin pérdidas gratuita que recoger en JPEG o WebP. Y las fotos procesadas en el modo de respaldo en el dispositivo conservan el codificador del navegador; esas ejecuciones nunca tocan nuestros servidores.

Conclusión práctica

Si tu archivo restaurado pesa más que tu escaneo, comprueba sus dimensiones en píxeles antes de suponer un desperdicio: con 6× los píxeles, un archivo algo más grande es el resultado esperado, y uno más pequeño significaría que se ha descartado detalle.