Es posible que necesite presentar contenido en múltiples niveles dependiendo de la distancia del observador a una pantalla. Digamos que desde lejos el usuario percibe un color plano, pero desde una distancia cercana el usuario necesita poder leer algo de texto. La parte difícil es que se da el color de fondo plano / puede cambiar / No tengo control sobre.
Hasta ahora, he creado un prototipo realmente básico para calcular el color del texto a partir del color de fondo (haga clic para elegir un fondo aleatorio). Este es un enfoque muy trivial: tomo el tono y lo compenso en 90 grados (por lo que es lo suficientemente diferente) e invierto el brillo en el espacio de color HSB para obtener un color lo suficientemente diferente como para ser legible / tener un contraste decente con el fondo .
Esto a veces funciona:
a veces no:
¿Es este enfoque bueno / en la buena dirección? Si es así, ¿cómo puedo mejorar esto? Si no, ¿qué dirección debo seguir?
Desafortunadamente, no sé mucho sobre la teoría del tipo y el color, por lo que cualquier sugerencia / consejo de personas con experiencia es muy útil. Esto se mostrará en una pantalla, no se imprimirá.
¿Qué relaciones entre los colores de fondo y de primer plano estoy buscando?
fuente
Aquí mi respuesta anterior a esencialmente la misma pregunta en Game Development Stack Exchange.
Para resumir, como sugieren las otras respuestas aquí, generalmente debe usar blanco o negro , dependiendo de cuál contrasta mejor con el fondo. (Por supuesto, si lo desea, dar a cualquiera de los colores un ligero tinte no afectará mucho el contraste).
Tenga en cuenta que, para determinar correctamente qué tan oscuro o claro aparece un color para el usuario, no es suficiente promediar los valores de color RGB (o tomar la claridad / valor de un color HSL / HSV). Por el contrario, debe tener en cuenta (al menos) dos efectos:
no linealidad del dispositivo en el que se muestra el color , que (al menos para los colores RGB en las pantallas de las computadoras) tiende a oscurecer los medios tonos, y
sensibilidad espectral del ojo humano , que, en términos generales, hace que el color cerca del medio del espectro visible (verde, amarillo, cian) parezca más brillante que aquellos cerca de los bordes (azul, rojo, púrpura).
El primer problema puede explicarse por la expansión gamma , mientras que el segundo simplemente requiere una ponderación no uniforme de los canales de color R / G / B. En conjunto, aquí se explica cómo calcular aproximadamente el brillo percibido de un color RGB y decidir si el negro o el blanco contrastarán mejor con él:
Eso es asumiendo eso
R
,G
yB
son números de punto flotante entre 0.0 a 1.0. Si tiene, por ejemplo, enteros de 0 a 255, conviértalos en flotantes y divídalos por 255.Las constantes en el código anterior son (aproximadamente) correctas para la entrada sRGB ; puede ajustarlos si está trabajando en otro espacio de color, aunque los valores exactos realmente no importan demasiado: para colores suficientemente oscuros o claros, la respuesta será la misma de todos modos, mientras que los colores que caen cerca de la línea de borde contrastarán casi igual de bien con blanco o negro de todos modos.
fuente
Estoy de acuerdo con John, mantenga el texto todo lo posible en blanco y negro solo para estar seguro, puede agregar una pequeña cantidad de saturación al texto también y estará seguro. Aquí hay una pequeña prueba:
Ver al 100% aquí: http://flavius.clickgarden.net/random-hsb-bg-readable-text/test-01.png Descargue el archivo .ai (fuente) aquí para jugar: http: // flavius. clickgarden.net/random-hsb-bg-readable-text/test.ai
fuente