2008-11-19 14 views
84

Parece que hay tantas aplicaciones web de rueda de color, selector de color y matcher de color, donde le da un color y encontrarán un par de otros colores que crearán un diseño armónico cuando se usen en combinación. Sin embargo, la mayoría de ellos solo se enfoca en los colores de fondo y cualquier texto impreso en cada color de fondo (si el texto está impreso en la vista previa) es negro o blanco.¿Cómo encontrar buen color de fuente si se conoce el color de fondo?

Mi problema es diferente. Sé el color de fondo que quiero usar para un área de texto. Lo que necesito ayuda es elegir un par de colores (cuanto más, mejor) que puedo usar como colores de fuente en este fondo. Lo más importante es que el color se asegurará de que la fuente sea legible (el contraste no es demasiado bajo, también puede no ser demasiado alto para evitar que los ojos estén estresados) y por supuesto que la combinación de primer plano y fondo se ve bien.

¿Alguien está al tanto de tal aplicación? Preferiría una aplicación web para cualquier cosa que tenga que descargar. Gracias.

Respuesta

14

Eche un vistazo a kuler, es un gran recurso para encontrar colores que combinen bien, solo haga una búsqueda del código de color HTML (por ejemplo, FF9900). No limitará el resultado a solo conjuntos que incluyan colores de alto contraste con el que seleccionó, pero los conjuntos típicamente tendrán una combinación de colores de contraste bajo y alto.

+0

Pero sólo porque se ven bien juntos, no significa que los pares de colores haría aumentar la legibilidad –

+0

Cada resultado de búsqueda es más que un par, es un conjunto de tres a cinco colores, que generalmente incluyen buenas opciones para el color de primer plano/fondo. –

+0

Es cierto que no evaluará automáticamente la legibilidad, pero pensé que sería útil poder buscar conjuntos generados por el usuario para un color específico. –

10

Podría considerar algo así como http://www.snook.ca/technical/colour_contrast/colour.html. Establezca el color de fondo, luego juegue con el color de primer plano hasta que obtenga algo que se vea bien (y lo ideal es que se ajuste a las pautas del W3C).

+0

Si bien este no hace realmente lo que necesito (debe crear un conjunto de colores, por lo que no tengo que verificar todos los colores manualmente), al menos es bueno verificar si una cierta combinación de primer plano/fondo será legible. votos ++ – Mecki

5

¿Has probado yaflacolor? No es exactamente lo que estás buscando (no te permite configurar tanto el texto como el color de fondo), pero muestra colores complementarios y versiones oscuras y claras de los colores juntos. A menos que a alguien se le ocurra exactamente lo que necesita, al menos podría ayudarlo a elegir sus colores.

+0

Fui directamente a favoritos. Gracias por eso. – MusiGenesis

2

Esta es una pregunta interesante, pero no creo que esto sea realmente posible. Si dos colores "se ajustan" como colores de fondo o de primer plano depende de la tecnología de visualización y las características fisiológicas de la visión humana, pero lo más importante es de los gustos personales formados por la experiencia. Una rápida ejecución a través de MySpace muestra bastante claramente que no todos los seres humanos perciben los colores de la misma manera. No creo que este sea un problema que se pueda resolver algorítmicamente, aunque puede haber una gran base de datos en algún lugar de colores que coincidan.

16

sugiero que pruebe algunos colores que se ve bien para usted (utilizando una de las herramientas sugeridas por otros en las respuestas si se quiere), pero no se olvide que color blindness existe, por lo probar la página en esta dirección:

http://colorfilter.wickline.org/

+1

Un buen punto. Aunque la mayoría de la gente probablemente podría leer texto amarillo sobre fondo azul fácilmente, algunas personas no pueden distinguir los dos colores. Optaría por blanco sobre negro o viceversa siempre que sea posible. – Kibbee

+0

Trataré de evitar una combinación de colores que sea totalmente ilegible para personas con daltonismo. votos ++ – Mecki

0

¿Ha considerado dejar que el usuario de la aplicación seleccionar su propia combinación de colores? Sin lugar a dudas, no podrá complacer a todos sus usuarios con su selección, pero puede permitirles encontrar lo que les agrada.

+1

No hay nada de malo en dejar que el usuario decida, pero al menos debería incluir un tema de color predeterminado útil, ¿no? No puede ser que sea ilegible y feo como el infierno de forma predeterminada hasta que cada usuario lo arregle ;-) – Mecki

38

Si necesita un algoritmo, intente esto: Convierta el color del espacio RGB al espacio HSV (Hue, Saturation, Value). Si su infraestructura de interfaz de usuario no puede hacerlo, consulte este artículo: http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV

Hue está en [0,360).Para encontrar el color "opuesto" (piensa colorwheel), sólo tiene que añadir 180 grados:

h = (h + 180) % 360; 

Para saturación y el valor, invertirlas:

l = 1.0 - l; 
v = 1.0 - v; 

convertir de nuevo a RGB. Esto siempre debería darle un alto contraste, aunque la mayoría de las combinaciones se verán feas.

Si se quiere evitar la parte "fea", construir una mesa con varias combinaciones de "buenas", encontrar el uno con la menor diferencia

def q(x): 
    return x*x 
def diff(col1, col2): 
    return math.sqrt(q(col1.r-col2.r) + q(col1.g-col2.g) + q(col1.b-col2.b)) 

y usar eso.

1

Puede ser extraño responder a mi propia pregunta, pero aquí hay otro selector de color realmente genial que nunca antes vi. No resuelve mi problema, ya sea: -. ((((Sin embargo, creo que es mucho más fresco a éstos ya sé

http://www.colorjack.com/

A la derecha, debajo de Herramientas seleccione "Color Sphere", una muy poderosa y esfera personalizable (vea lo que puede hacer con las ventanas emergentes en la parte superior), "Color Galaxy", todavía no estoy seguro de cómo funciona esto, pero se ve bien y "Color Studio" también es agradable. Además, puede exportar a todos tipo de formatos (por ejemplo, Illustrator o Photoshop, etc.)

¿Qué tal esto, elijo mi color de fondo allí, déjalo crear un color complementario (desde la primera ventana emergente) - esto debería tener el mayor contraste y por lo tanto ser mejor legible, ahora seleccione el color complementario como color principal y seleccione neutral? Hmmm ... tampoco demasiado grande, pero estamos mejorando ;-)

+0

Nah, no es extraño en absoluto para responder a su propia pregunta, he terminado haciéndolo un par de veces y obteniendo las respuestas solo superan a la comunidad. –

1

Otro sitio de generación de esquemas, pero incluye opciones para ayudar a controlar el daltonismo en función del porcentaje de la población afectada.

Well Sytled Color Scheme Generator

+0

¿No lo he visto antes? De todos modos, se ve bien y me gusta la vista previa de la página en los colores elegidos. Gracias. – Mecki

4

bien, esto todavía no es la mejor solución posible, pero un buen punto para empezar. Escribí una pequeña aplicación de Java que calcula la relación de contraste de dos colores y solo procesa colores con una proporción de 5: 1 o mejor. Esta relación y la fórmula que uso ha sido lanzada por el W3C y probablemente reemplazará la recomendación actual (que Considero muy limitado). Crea un archivo en el directorio de trabajo actual llamado "elegido-letra-colores.html", con el color de fondo de su elección y una línea de texto en cada color que pasó esta prueba W3C. Espera un único argumento, siendo el color de fondo.

E.g. puede llamarlo así

java FontColorChooser 33FFB4 

y abra el archivo HTML generado en un navegador de su elección y elija un color de la lista. Todos los colores dados pasaron la prueba W3C para este color de fondo. Puedes cambiar el corte reemplazando 5 con el número que elijas (los números más bajos permiten contrastes más débiles, por ej. 3 solo asegurarán que el contraste sea 3: 1, 10 se asegurarán de que sea al menos 10: 1) y también podrás corte para evitar contrastes demasiado altos (asegurándose de que sea más pequeño que un cierto número), por ejemplo añadiendo

|| cDiff > 18.0 

a la cláusula si se asegurará de contraste no será demasiado extrema, como los contrastes demasiado extremas pueden provocar daños en los ojos.Aquí está el código y divertirse jugando con él un poco :-)

import java.io.*; 

/* For text being readable, it must have a good contrast difference. Why? 
* Your eye has receptors for brightness and receptors for each of the colors 
* red, green and blue. However, it has much more receptors for brightness 
* than for color. If you only change the color, but both colors have the 
* same contrast, your eye must distinguish fore- and background by the 
* color only and this stresses the brain a lot over the time, because it 
* can only use the very small amount of signals it gets from the color 
* receptors, since the breightness receptors won't note a difference. 
* Actually contrast is so much more important than color that you don't 
* have to change the color at all. E.g. light red on dark red reads nicely 
* even though both are the same color, red. 
*/ 


public class FontColorChooser { 
    int bred; 
    int bgreen; 
    int bblue; 

    public FontColorChooser(String hexColor) throws NumberFormatException { 
     int i; 

     i = Integer.parseInt(hexColor, 16); 
     bred = (i >> 16); 
     bgreen = (i >> 8) & 0xFF; 
     bblue = i & 0xFF; 
    } 

    public static void main(String[] args) { 
     FontColorChooser fcc; 

     if (args.length == 0) { 
      System.out.println("Missing argument!"); 
      System.out.println(
       "The first argument must be the background" + 
       "color in hex notation." 
      ); 
      System.out.println(
       "E.g. \"FFFFFF\" for white or \"000000\" for black." 
      ); 
      return; 
     } 
     try { 
      fcc = new FontColorChooser(args[0]); 
     } catch (Exception e) { 
      System.out.println(
       args[0] + " is no valid hex color!" 
      ); 
      return; 
     } 
     try { 
      fcc.start(); 
     } catch (IOException e) { 
      System.out.println("Failed to write output file!"); 
     } 
    } 

    public void start() throws IOException { 
     int r; 
     int b; 
     int g; 
     OutputStreamWriter out; 

     out = new OutputStreamWriter(
      new FileOutputStream("chosen-font-colors.html"), 
      "UTF-8" 
     ); 

     // simple, not W3C comform (most browsers won't care), HTML header 
     out.write("<html><head><title>\n"); 
     out.write("</title><style type=\"text/css\">\n"); 
     out.write("body { background-color:#"); 
     out.write(rgb2hex(bred, bgreen, bblue)); 
     out.write("; }\n</style></head>\n<body>\n"); 

     // try 4096 colors 
     for (r = 0; r <= 15; r++) { 
      for (g = 0; g <= 15; g++) { 
       for (b = 0; b <= 15; b++) { 
        int red; 
        int blue; 
        int green; 
        double cDiff; 

        // brightness increasse like this: 00, 11,22, ..., ff 
        red = (r << 4) | r; 
        blue = (b << 4) | b; 
        green = (g << 4) | g; 

        cDiff = contrastDiff(
         red, green, blue, 
         bred, bgreen, bblue 
        ); 
        if (cDiff < 5.0) continue; 
        writeDiv(red, green, blue, out); 
       } 
      } 
     } 

     // finalize HTML document 
     out.write("</body></html>"); 

     out.close(); 
    } 

    private void writeDiv(int r, int g, int b, OutputStreamWriter out) 
     throws IOException 
    { 
     String hex; 

     hex = rgb2hex(r, g, b); 
     out.write("<div style=\"color:#" + hex + "\">"); 
     out.write("This is a sample text for color " + hex + "</div>\n"); 
    } 

    private double contrastDiff(
     int r1, int g1, int b1, int r2, int g2, int b2 
    ) { 
     double l1; 
     double l2; 

     l1 = ( 
      0.2126 * Math.pow((double)r1/255.0, 2.2) + 
      0.7152 * Math.pow((double)g1/255.0, 2.2) + 
      0.0722 * Math.pow((double)b1/255.0, 2.2) + 
      0.05 
     ); 
     l2 = ( 
      0.2126 * Math.pow((double)r2/255.0, 2.2) + 
      0.7152 * Math.pow((double)g2/255.0, 2.2) + 
      0.0722 * Math.pow((double)b2/255.0, 2.2) + 
      0.05 
     ); 

     return (l1 > l2) ? (l1/l2) : (l2/l1); 
    } 

    private String rgb2hex(int r, int g, int b) { 
     String rs = Integer.toHexString(r); 
     String gs = Integer.toHexString(g); 
     String bs = Integer.toHexString(b); 
     if (rs.length() == 1) rs = "0" + rs; 
     if (gs.length() == 1) gs = "0" + gs; 
     if (bs.length() == 1) bs = "0" + bs; 
     return (rs + gs + bs); 
    } 
} 
+0

Más uno, Cálculo de contraste, exactamente lo que estaba buscando. –

0

similares a la sugerencia de @Aaron Digulla excepto que yo sugeriría una herramienta de diseño de gráficos, seleccione el color base, en su caso, el color de fondo, luego ajuste el Tono, la Saturación y el Valor. Usando esto puedes crear muestras de color muy fácilmente. Paint.Net es gratuito y lo uso todo el tiempo para esto y también el pago por herramientas también lo hará.

2

He implementado algo similar por una razón diferente: el código indicaba al usuario final si los colores de primer plano y de fondo que seleccionaban daban como resultado un texto ilegible. Para hacer esto, en lugar de examinar los valores RGB, convertí el valor del color a HSL/HSV y luego determiné mediante experimentación cuál era mi punto de corte para la legibilidad al comparar los valores fg y bg. Esto es algo que puede querer/necesitar considerar.

1

Personalmente, no creo que podamos encontrar un algoritmo para calcular el color de texto más coincidente especificando el color de fondo.

creo que actualmente el artista debe tener una lista de pares de colores que tiene buena calidad de la lectura, podemos añadirlos a una tabla, y establecer uno de estos pares al azar como nuestro tema de lectura ...

esto es mucho más razonable, y no vamos a conseguir pares de colores feos ....

5

vez que haya elegido un color "guapo" para el texto, puede tener accesibilidad colores/wcag compatible usando Tanaguru Contrast-Finder.

También es de código abierto y está disponible en Github https://github.com/Tanaguru/Contrast-Finder

(exención de responsabilidad: yo soy su creador)

+0

Otra herramienta de contraste de color que podría ayudar: http://accessible-colors.com –

0

En una aplicación reciente que he hecho, he utilizado los colores invertidos. Con los valores R, G y B en la mano, simplemente calcular (en este ejemplo, la gama de colores varía de 0 a 255):

r = 127-(r-127) and so on. 
Cuestiones relacionadas