Dobry kolor tekstu dla danego koloru tła

Rysuję Przycisk Wyboru Koloru i szukam ładnej i prostej formuły, aby uzyskać dobry kolor tekstu (pierwszy plan) dla danego koloru tła W RGB.

Prostą próbą byłoby po prostu pobranie koloru dopełniacza, ale spowoduje to dziwnie wyglądający przycisk dla kolorów takich jak czysty niebieski lub czysty czerwony.
Czy jest coś dobrze znanego, co tak robi?

Jeśli to ma jakiekolwiek znaczenie, używam QT.

Author: Anurag Singh, 2009-06-03

9 answers

Aby uzyskać maksymalną czytelność, potrzebujesz maksymalnego kontrastu jasności bez przechodzenia w odcienie, które nie współpracują ze sobą. Najbardziej spójnym sposobem na to jest trzymanie się czarnego lub białego dla koloru tekstu. Możesz być w stanie wymyślić bardziej estetyczne schematy, ale żaden z nich nie będzie bardziej czytelny.

Aby wybrać pomiędzy czernią a bielą, musisz znać jasność tła. Robi się to nieco bardziej skomplikowane, ze względu na dwa czynniki:

  • Postrzegana jasność poszczególnych pierwotnych czerwonych, zielonych i niebieskich nie jest identyczna. Najszybszą radą, jaką mogę dać, jest użycie tradycyjnego Wzoru do konwersji RGB na szary-R*0.299 + G*0.587 + B*0.114. Istnieje wiele innych formuł.

  • Krzywa gamma zastosowana do wyświetlaczy powoduje, że średnia wartość szarości jest wyższa niż można by się spodziewać. Można to łatwo rozwiązać, używając 186 jako średniej wartości, a nie 128. Wszystko mniej niż 186 powinno używać biały tekst, każdy większy niż 186 powinien używać czarnego tekstu.

 116
Author: Mark Ransom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-03 19:38:53

Nie jestem ekspertem w programowaniu rzeczy związanych z RGB, ale z perspektywy projektanta, często najbardziej czytelny kolor będzie po prostu znacznie jaśniejszą (jeśli kolor tła jest ciemny) lub ciemniejszą (jeśli kolor tła jest jasny) wersją tego samego odcienia.

Zasadniczo weźmiesz swoje wartości RGB i jeśli są bliżej 0 (ciemne), popchniesz je każdy w górę o taką samą wartość dla koloru pierwszego planu, lub odwrotnie, jeśli jest to jasny BG.

Kolory dopełniacza mogą być naprawdę bolesne w oczach dla czytelności.

 11
Author: Gabriel Hurley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-03 19:09:33

Wykorzystaj zarys czytelności

Jeśli przez "dobry kolor tekstu (pierwszy plan)" zamierzamy go dla czytelności, gdy użytkownik wybierze any background colour, zawsze możemy wytworzyć biały tekst z czarnym konturem. Będzie czytelny na dowolnym stałym, wzorzystym lub gradientowym tle, od Czarnego do białego i wszystkiego pomiędzy.

Tutaj wpisz opis obrazka

Nawet jeśli nie trafi to w twoje intencje, myślę, że warto tu zamieścić, ponieważ przyszedłem szukając podobnych rozwiązań.

 9
Author: John K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-28 00:25:35

Bazując na odpowiedzi Marka, oto kod Ruby, który wykona pracę

rgbval = "8A23C0".hex
r = rgbval >> 16
g = (rgbval & 65280) >> 8
b = rgbval & 255
brightness = r*0.299 + g*0.587 + b*0.114
return (brightness > 160) ? "#000" : "#fff"
 4
Author: Darren Hicks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-17 18:12:01

Lepiej Ci z dużą różnicą jasności. Ogólnie rzecz biorąc, kolorowe tła z kolorowym tekstem ssać dla czytelności, raniąc oczy w czasie. Kolory lekko przyciemnione (np. w HSB, S~10%, B>90%) z czarnym tekstem działają dobrze, lub lekko przyciemniony tekst na czarnym tle. Trzymałbym się z dala od kolorowania obu. Ciemny tekst (b~30%, s>50%) z subtelnym zabarwieniem na białym tle może być również w porządku. Żółty (bursztynowy) tekst na ciemnoniebieskim tle ma doskonałą czytelność, podobnie jak bursztynowy lub zielony na czarnym. Dlatego stare dumbtermy (vt100, vt52 itp.) sięgnął po te kolory.

Jeśli naprawdę potrzebujesz zrobić kolor na kolor dla "wyglądu", możesz odwrócić zarówno H, jak i B, jednocześnie przypinając nasycenie na umiarkowanym lub niskim poziomie.

I ostatnia uwaga: jeśli masz 50% szare tło, przemyśl swój interfejs. Okradasz się z połowy zakresu dynamicznego! Zrażasz użytkowników o słabej widoczności, w tym wszystkich Powyżej 35 roku życia...

 3
Author: Alex Feinman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-03 19:24:47

Kombinacje kolorów często wyglądają okropnie, gdy nie są starannie dobrane. Dlaczego nie użyć białego lub czarnego tekstu, w zależności od jasności koloru. (Najpierw trzeba będzie przekonwertować na HSB.)

Lub pozwól użytkownikowi wybrać czarny lub biały tekst.

Lub użyć predefiniowanych kombinacji. To właśnie robi Google w swoim produkcie kalendarza.

 2
Author: Larry K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-03 19:20:49

Szukałem odpowiedzi simailr i natknąłem się na ten post i kilka innych, które myślałem, że podzielę. Zgodnie z http://juicystudio.com/services/luminositycontrastratio.php#specify "kryterium sukcesu 1.4.3 WCAG 2.0 wymaga wizualnej prezentacji tekstu, a obrazy tekstu mają współczynnik kontrastu co najmniej 4,5:1" z pewnymi wyjątkami. Ta strona pozwala umieścić na pierwszym planie i kolorach tła, aby obliczyć ich kontrast, chociaż byłoby pomocne, gdyby to zaproponuj alternatywy lub zakresy.

Jedną z najlepszych stron, jakie znalazłem do wizualizacji kontrastu kolorów jest http://colorizer.org/ pozwala dostosować prawie wszystkie skale kolorów (RGB, CMYK, itp.) w tym samym czasie, a następnie pokazuje wynik na ekranie, na przykład biały tekst na żółtym tle.

 1
Author: elg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-24 14:34:59

Zazwyczaj patrzę na dopełnienia kolorów, mają również koła dopełnienia kolorów, które pomagają

Http://www.makart.com/resources/artclass/cwheel.html

Jeśli twoim kolorem jest HSL, Odwróć odcień o 180 stopni, aby uzyskać przyzwoite obliczenia

 0
Author: Bob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-03 19:10:21

Wydaje mi się, że konwersja na HSV może być drogą, ale IMO zmiana barwy wyglądałaby dziwnie. Spróbowałbym zachować odcień i majstrować przy wartości i może nasyceniu (jasnoczerwone przyciski z ciemnoczerwonym tekstem ... hm brzmi strasznie: -)).

 -1
Author: cube,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-03 19:16:35