2008-11-19 2 views
84

Там, кажется, так много цветовых колес, цветовых решений и цветных веб-приложений, где вы даете один цвет, и они найдут пару других цветов, которые создадут гармоническую компоновку при использовании в сочетании. Однако большинство из них фокусируются только на цвета фона, и любой текст, напечатанный на каждом цвете фона (если текст полностью напечатан в предварительном просмотре), либо черный, либо белый.Как найти красивый цвет шрифта, если цвет фона известен?

Моя проблема в другом. Я знаю цвет фона, который я хочу использовать для текстовой области. Мне нужна помощь в выборе пары цветов (чем больше, тем веселее), я могу использовать в качестве цветов шрифта на этом фоне. Наиболее важным является то, что цвет будет гарантировать, что шрифт доступен для чтения (контраст не слишком низкий, а может быть, и не слишком высокий, чтобы избежать стресса глаз), и, конечно, комбинация переднего плана и фона просто выглядит хорошо.

Кому-нибудь известно о таком приложении? Я бы предпочел веб-приложение на все, что мне нужно скачать. Благодарю.

ответ

14

Отъезд kuler, это отличный ресурс для поиска цветов, которые хорошо сочетаются, просто выполните поиск цветового кода HTML (например, FF9900). Он не будет ограничивать результат только наборами, которые включают высококонтрастные цвета с выбранным вами, но наборы обычно будут иметь комбинацию цветов с низкой и высокой контрастностью.

+0

Но только потому, что они выглядят хорошо вместе, не означает, что цветовые пары будут повысить читаемость. – 2008-11-19 13:27:16

+0

Каждый результат поиска на самом деле больше, чем пара, это набор из трех-пяти цветов, который обычно включает в себя хороший выбор цвета переднего плана/фона. – 2008-11-19 13:35:04

+0

Это правда, что он не будет автоматически оценивать читаемость, хотя, но я думал, что стоит искать пользовательские наборы для определенного цвета, о которых стоит упомянуть. – 2008-11-19 13:35:36

10

Вы можете считать что-то вроде http://www.snook.ca/technical/colour_contrast/colour.html. Установите цвет фона, затем поиграйте с цветом переднего плана, пока не получите то, что выглядит хорошо (и в идеале соответствует рекомендациям W3C).

+0

Хотя этот не делает действительно то, что мне нужно (он должен создавать набор цветов, поэтому мне не нужно проверять каждый цвет вручную), по крайней мере, хорошо проверить, будет ли определенная комбинация переднего плана/фона удобочитаемый. голосов ++ – Mecki 2008-11-19 13:34:27

5

Вы попробовали yaflacolor? Это не совсем то, что вы ищете (это не позволяет вам устанавливать цвет текста и фона), но он показывает бесплатные цвета и темные и светлые версии цветов вместе. Если кто-то не придумает то, что вам нужно, он может по крайней мере помочь вам выбрать ваши цвета.

+0

Пошел прямо в избранное. Спасибо за это. – MusiGenesis 2008-11-19 13:32:08

2

Это интересный вопрос, но я не думаю, что это действительно возможно. Независимо от того, соответствуют ли два цвета «фоновым» и «передним» цветам, технологии дисплея и физиологические характеристики человеческого зрения, но, самое главное, на основе личных вкусов, сформированных опытом. Быстрый прогон через MySpace довольно ясно показывает, что не все люди воспринимают цвета одинаково. Я не думаю, что это проблема, которая может быть решена алгоритмически, хотя может быть огромная база данных где-то приемлемых цветов соответствия.

16

Я предлагаю вам попробовать некоторые цвета, которые выглядят хорошо для вас (с помощью одного из инструментов, предложенных другими в ответах, если вы хотите), но не стоит забывать, что color blindness существует, так проверить свою страницу по этому адресу:

http://colorfilter.wickline.org/

+1

Хороший момент. Хотя большинство людей, возможно, легко читают желтый текст на синем фоне, некоторые люди не могут различить два цвета вообще. Я бы выбрал белый на черном или наоборот, где это возможно. – Kibbee 2008-11-19 13:47:19

+0

Я постараюсь избежать комбинации цветов, которая совершенно нечитаема для людей с цветной слепотой. голосов ++ – Mecki 2008-11-19 14:09:56

0

Рассматривали ли вы позволить пользователю вашего приложения выберите свою собственную цветовую схему? В обязательном порядке вы не сможете порадовать всех своих пользователей своим выбором, но вы можете позволить им найти то, что им нравится.

+1

Нет ничего плохого в том, чтобы позволить пользователю решить, но я должен по крайней мере включить полезную цветовую тему по умолчанию, не так ли? Не может быть, что это невозможно прочитать и уродливо, как черт по умолчанию, до тех пор, пока каждый пользователь его не исправит ;-) – Mecki 2008-11-19 13:51:56

38

Если вам нужен алгоритм, попробуйте следующее: Преобразуйте цвет из пространства RGB в пространство HSV (оттенок, насыщенность, значение). Если ваш интерфейс пользовательского интерфейса не может этого сделать, проверьте эту статью: http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV

Оттенок находится в [0,360].Для того, чтобы найти "противоположный" цвет (думаю Colorwheel), просто добавьте 180 градусов:

h = (h + 180) % 360; 

Для насыщения и значения, инвертный их:

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

Преобразовать обратно в RGB. Это всегда должно давать вам высокую контрастность, хотя большинство комбинаций выглядят уродливыми.

Если вы хотите, чтобы избежать «уродливый» часть, построить таблицу с несколькими «хороших» комбинации найти ту, с наименьшей разницей

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)) 

и использовать это.

1

Возможно, странно ответить на мой собственный вопрос, но вот еще один действительно классный выбор цвета, который я никогда раньше не видел. Это не решает мою проблему либо: -. ((((Но я думаю, что это намного круче них я уже знаю

http://www.colorjack.com/

Справа под Инструменты выберите «Color Sphere», очень мощный и настраиваемая сфера (см., что вы можете делать с всплывающими окнами сверху), «Color Galaxy», я все еще не уверен, как это работает, но выглядит круто, и «Color Studio» также хорош. Дальше он может экспортировать все (например, Illustrator или Photoshop и т. д.)

Как насчет этого, я выбираю свой цвет фона там, пусть он создает бесплатный цвет (от первого всплывающего окна) - это должно иметь самый высокий контраст и, следовательно, быть лучшим читаемые, теперь выберите дополнительный цвет в качестве основного цвета и выбрать нейтраль? Хммм ... тоже не слишком хорошо, но мы улучшаемся ;-)

1

Другой сайт генерации схемы, но он включает в себя варианты, которые помогут справиться с цветной слепотой на основе процентной доли затронутой популяции.

Well Sytled Color Scheme Generator

4

Ладно, это еще не самое лучшее возможное решение, но хорошая точка для начала. Я написал небольшое приложение Java, которое вычисляет коэффициент контрастности двух цветов и обрабатывает только цвета с соотношением 5: 1 или выше - это соотношение и формула, которые я использую, были выпущены W3C и, вероятно, заменит текущую рекомендацию (которая Я считаю очень ограниченным). Он создает файл в текущем рабочем каталоге с именем «selected-font-colors.html» с цветом фона по вашему выбору и строкой текста в каждом цвете, который прошел этот тест W3C. Он ожидает единственный аргумент, являющийся цветом фона.

E.g. вы можете называть это следующим образом:

java FontColorChooser 33FFB4 

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Все указанные цвета прошли тест W3C для этого цвета фона. Вы можете изменить отрезание, заменив 5 на ваш выбор (более низкие цифры позволяют более слабые контрасты, например, 3 только убедитесь, что контрастность составляет 3: 1, 10 убедитесь, что он не менее 10: 1), и вы также можете отключить, чтобы избежать слишком высоких контрастов (при этом оно меньше определенного числа), например добавление

|| cDiff > 18.0 

в положение if гарантирует, что контраст не будет слишком экстремальным, так как слишком экстремальные контрасты могут подчеркнуть ваши глаза.Вот код и получать удовольствие играя с ним немного :-)

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

Подобно предложению @Aaron Digulla, за исключением, что я хотел бы предложить графический дизайн инструмент, выберите базовый цвет, в вашем случае цвет фона, затем отрегулируйте оттенок, насыщенность и значение. Используя это, вы можете легко создавать цветовые образцы. Paint.Net является бесплатным, и я использую его все время для этого, а также оплачиваемые инструменты также будут делать это.

2

Я реализовал что-то подобное по другой причине - это код, указывающий конечному пользователю, будут ли цвета переднего плана и фона, которые они выбрали, привести к нечитаемому тексту. Чтобы сделать это, вместо того, чтобы анализировать значения RGB, я преобразовал значение цвета в HSL/HSV, а затем определил с помощью эксперимента, что моя точка отсечки была для читаемости при сравнении значений fg и bg. Это то, что вам может понадобиться/нужно рассмотреть.

1

Лично я не думаю, что мы можем найти алгоритм для вычисления наиболее подходящего цвета текста, указав цвет фона.

Я думаю, что в настоящее время художник должен иметь список цветовых пар, который имеет хорошее качество чтения, мы можем добавить их к столу, и установите один из этих пар случайно в нашей чтения темы ...

это очень разумно, и мы не получим некрасивые пары цветов ....

0

Вот хорошая статья, которую я нашел на эту тему:

http://www.particletree.com/notebook/calculating-color-contrast-for-legible-text/

Он обеспечивает s эффективный алгоритм для, учитывая цвет фона и светлый и темный цвет переднего плана, выбирая, какой из вариантов цвета переднего плана будет более читабельным.

5

После того, как вы выбрали «хороший поиск» цвет текста, вы можете иметь доступность/WCAG-совместимых цветов используя Tanaguru Contrast-Finder.

Он также с открытым исходным кодом и доступен на Github https://github.com/Tanaguru/Contrast-Finder

(отказ от ответственности: Я его создатель)

0

В недавнем приложении, которое я сделал, я использовал инвертированные цвета. С R, G и Ь значения в руке, просто вычислить (в этом примере, цветовая гамма варьируется от 0 до 255):

r = 127-(r-127) and so on. 
Смежные вопросы