2011-11-03 11 views
8

Estoy buscando un algoritmo para obtener el mejor color de texto (más agradable a la vista) a partir de un color de fondo determinado.Algoritmo para obtener el mejor color de texto

¿Alguna idea?

+6

No va a votar porque es interesante y útil, pero es posible que desee explicar el "mejor color" un poco más claro para todos. – Widor

+0

Widor tiene un muy buen punto. Por favor, vuelva a escribir para ampliar lo que quiere decir con "mejor color" (más agradable a la vista, mayor contraste, ceguera al color amigable, lo que sea). – NPE

+0

"más agradable a la vista" – user954469

Respuesta

12

"El mejor color" es muy subjetivo y depende del contexto. Depende del efecto que desee: si desea el mayor contraste posible, busque colores complementarios (que le darían rojo sobre verde, amarillo sobre azul, etc.). Si quieres colores que sean "similares", busca armonías análogas. Si solo quiere decidir entre blanco y negro, mida el brillo (hamstergene publicó una fórmula muy buena para él).

Donde quiera que vaya, el modelo de color HSV es la clave.

Obtener colores complementarios o análogos es trivial (por ejemplo, hue_text = (hue_bg + 180) % 360 O hue_text = (hue_bg + 30) % 360).

También puede experimentar con el valor (claridad) y la saturación para un mejor contraste. Por ejemplo, v_text = 1 - v_bg podría darle texto oscuro sobre fondo brillante y viceversa (¡tenga cuidado con los tonos medios!). No tiene que ser lineal; también puede utilizar una función de paso como: if v_bg < 0.5 then v_text = 1 else v_text = 0 o if s_bg < 0.5 then s_text = 1 else s_text = 0 (vibrante en pálido).

Eso son sólo algunos consejos. En una palabra: ¡Depende!

Google para teoría del color y armonías de color. Algunos enlaces:

http://www.tigercolor.com/color-lab/color-theory/color-harmonies.htm

http://www.colormatters.com/color-and-design/basic-color-theory

6

No hay mejor para todos.

decir que si usted necesita para asegurarse de que el texto sea fácil de leer, la siguiente fórmula sencilla funcionó bien para mí:

textColor = brightness(backColor) > 0.5 ? black : white; 

donde el brillo se define como

brightness(R,G,B) = 0.299*R + 0.587*G + 0.114*B 

(hay varias definiciones para "brillo", utilicé este pero creo que cualquiera trabajaría).

+0

Volví a buscarlo y recordando que alguien dio una mejor respuesta, y aquí está. :-) –

Cuestiones relacionadas