Los colores que estás viendo en esa página web no están bien. Las imágenes PNG o los valores hexadecimales que se usan en el código CSS o en las imágenes SVG nos traicionan, pero la culpa no es de ellas, sino de nuestra obsesión por tratar de comprimir los datos.

Esto ocurre porque utilizamos un algoritmo de compresión “8bit sRGB”, este algoritmo se lleva utilizando desde 1996.

Este algoritmo su intención es hacer nuestras webs algo más ligeras, porque como no dejan de crecer de manera desproporcionada.

Lo ideal sería almacenar los valores numéricos reales del brillo que corresponderían a la intensidad de la luz, así que más que un “espacio de color”, como algunos lo definen, sRGB es eso, una tecnología de compresión con pérdida.

La realidad es que este algoritmo es engañoso. Los desarrolladores web creen que uno puede sumar y restar colores ofreciendo los números de los colores sRGB a los usuarios, pero esos números no tienen un significado demasiado real: no se pueden coger dos colores, mezclarlos y esperar que obtengamos el color esperado, pero eso es lo que hacen todos los grandes navegadores web.

Lo que realmente deberían hacer es convertir esos valores sRGB a valores lineales RGB, procesarlos y luego volver a convertir el resultado en sRGB si se necesita.

Quienes hacen operaciones de forma directa sobre valores sRGB lo están haciendo mal, y eso provoca que la representación del color en la web no sea la adecuada.

Hay solución, no obstante. El atributo color-interpolation de los ficheros SVG permite resolver el problema, pero curiosamente ningún navegador lo implementa a pesar de que dicho atributo se creó en la especificacion SVG 1.1 de 2003. Han pasado casi dos décadas desde entonces, y los navegadores no hacen correctamente su trabajo.

El organismo W3C está muy al tanto del problema, y de hecho hay propuestas para resolverlo en CSS4, la revisión de este estándar. En ella se propone el uso del espacio de color perceptivo Oklab que hace uso de tres coordenadas y que dispone de diversas implementaciones.

Curiosamente quienes sí lo hacen son nuestras tarjetas gráficas y los desarrolladores de videojuegos. El procesamiento lineal de esos datos RGB es necesario para entornos realistas, y las GPUs modernas son capaces de convertir de forma transparente desde y a sRGB al cargar y renderizar imágenes sin pérdida de rendimiento.