«Comprime esta imagen» son cuatro operaciones distintas disfrazadas de un solo botón. Saber cuál de ellas te cuesta calidad hace que los ajustes dejen de ser un misterio.
Paso uno: descodificar
El archivo comprimido se vuelve a convertir en una rejilla de píxeles. Los navegadores hacen esto en código nativo, con aceleración por hardware allí donde la plataforma la ofrece, y se manejan con JPEG, PNG, WebP y AVIF, además de HEIC en las plataformas de Apple, porque el sistema operativo ya trae ese descodificador.
Descodificar es un proceso sin pérdida respecto al archivo: obtienes exactamente los píxeles que el archivo describe. La pérdida ya ocurrió antes, cuando lo codificó aquello que lo produjo.
Paso dos: orientación
Las cámaras de los móviles guardan la orientación en bruto del sensor más una etiqueta EXIF aparte que dice cómo hay que girarla. El software que ignora esa etiqueta produce fotos tumbadas. Aplicarla significa girar la rejilla de píxeles antes de que nada más la toque; después, la etiqueta ya no hace falta, que es parte del motivo por el que recodificar elimina los metadatos.
Paso tres: remuestrear
Si no se puede llegar al tamaño objetivo a resolución completa, la imagen se reduce. Aquí es donde se gana o se pierde en silencio buena parte de la calidad percibida. Un filtro de caja barato promedia los píxeles vecinos y lo suaviza todo; un filtro Lanczos pondera un vecindario más amplio y mantiene los bordes limpios.
Remuestrear es realmente destructivo —los píxeles que se descartan no vuelven—, pero muchas veces es la manera menos destructiva de llegar a un objetivo pequeño, porque quita un detalle en el que el codificador se gastaría, si no, todo su presupuesto sin conseguir describirlo.
Paso cuatro: codificar
La parte con pérdida. JPEG pasa a una representación de brillo más color, descarta parte de la resolución de color (el ojo apenas lo nota), divide la imagen en bloques de 8×8, transforma cada uno en componentes de frecuencia y luego cuantiza, es decir, redondea hasta hacer desaparecer el detalle de alta frecuencia. El parámetro de calidad es la brusquedad de ese redondeo. Todo lo que viene después es codificación entrópica sin pérdida, y por eso una tabla de Huffman optimizada o un barrido progresivo ahorran bytes gratis.
Dónde entra WebAssembly
El codificador integrado del navegador es una caja negra: puedes pedirle un número de calidad y nada más. Ni tablas entrópicas optimizadas, ni elección entre baseline y progresivo, ni control sobre el filtro de remuestreo, ni forma de saber cuántos bytes dará un ajuste sin probarlo.
Un códec compilado a WebAssembly te devuelve todo eso, a cambio de los bytes que gastas en descargarlo. ToolZool ejecuta así la cadena entera —descodificación, orientación, remuestreo y codificación son Rust compilado a WebAssembly, en un worker en segundo plano— en vez de dejarle la descodificación al navegador. Por tres motivos, todos prácticos:
- La búsqueda necesita muchas codificaciones. Llegar a un tamaño exacto significa codificar la misma imagen cinco o seis veces. Ser dueños del codificador es lo que hace que eso salga barato y se pueda repetir.
- Un descodificador tiene que poder decir que no. Un archivo que declara 60.000 × 60.000 píxeles hay que rechazarlo antes de que reserve memoria, y un archivo truncado tiene que fallar en lugar de devolver media imagen. El descodificador del navegador toma ahí sus propias decisiones; el nuestro declara los límites y los aplica.
- La misma entrada tiene que dar la misma salida. Los descodificadores de los navegadores difieren en el tratamiento del color y en cómo se enfrentan a los archivos mal formados. Una cadena que controla los dos extremos produce los mismos bytes en cualquier dispositivo, que es lo que hace que un resultado se pueda comprobar.
El coste es honesto: ese motor es una descarga. Solo se pide cuando eliges un archivo, así que leer una página como esta no lo paga nunca.
Por qué la búsqueda importa más que el códec
Dado un tamaño de archivo objetivo, la diferencia entre un buen codificador y uno excelente es de un pequeño porcentaje. La diferencia entre adivinar con un deslizador de calidad y buscar el valor correcto es mucho mayor, porque una suposición que se queda en el 60 % de tu margen ha tirado un tercio de la calidad a la que tenías derecho. Esa es toda la idea detrás de comprimir a un tamaño exacto, y cómo bajar de 50 KB enseña lo que te da la búsqueda en el extremo más difícil del rango.

