背景色によって白か黒の文字色を選ぶ時、黒い背景の時は白い文字、白い背景の文字の時は黒い文字が見やすいのは確かですが、青い背景や赤い背景、黄色の背景ではどうでしょうか?
RGB値はそれぞれ 0 ~ 255 の数値で表され、0 に近いほど暗くなり、255 に近いほど白っぽくなるのはご存知かと思います。
そこで、RGB の平均が半分を超えていれば明るい背景で、半分以下なら暗い背景であると単純に考えてしまうのは誤りです。
青(0, 0, 255) はその基準では暗い背景であり、確かに白い文字は見やすいです。
SAMPLE
緑色(0, 255, 0) も同じ平均値なので白い文字を使ってみます。
SAMPLE
かなり読みづらいのがわかると思います。
人間の視覚では RGB の青は暗く、緑は明るく見えるからです。
そこで映像分野でよく使われている輝度成分を利用します。
輝度(Y)は次の変換公式がよく使われています。
Y = 0.299 × R + 0.587 × G + 0.114 × B
では、RGBの平均を基準にしたものと、輝度を基準にしたもので文字の見え方がどう変わるか見てみます。
RGBでは緑、ピンクが見づらいですが、輝度を基準にしたものは解消されています。算出に用いた PHP のプログラムは以下です。
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Sample</title> </head> <body> <?php $colors = array( array(0, 0, 0), array(255, 255, 255), array(255, 0, 0), array(0, 255, 0), array(0, 0, 255), array(255, 255, 0), array(0, 255, 255), array(255, 0, 255) ); foreach($colors as $color){ list($r, $g, $b) = $color; $y = 0.299 * $r + 0.587 * $g + 0.114 * $b; $html = <<<EOD <span style="background-color: rgb(%d, %d, %d);color: %s;"> SAMPLE</span><br /> EOD; $textColor = ($y > 127) ? 'black' : 'white'; printf($html, $r, $g, $b, $textColor); } ?> </body> </html>
参考: Wikipedia「YUV」
http://ja.wikipedia.org/wiki/YUV
Similar Posts:
- [PHP]GDで作った画像をファイル化せずに直接<img>タグで表示する
- [CSS, jQuery]クリックされたボタンの色を変更したり文字を書き換えたりする
- [PHP]文字列の内容に応じて自動で色分けする
- [PHP]投稿数や出現回数に応じて文字サイズが変わるタグクラウド
- [PHP][HTML, CSS]画像を隙間なく並べて表示
- [PHP, JS]jQuery UI autocompleteを使った自動補完(候補予測)
- [CSS]Transitionでマウスオーバー時(:hover)などに動きをつける
- [PHP]ついやってしまいがちな汚いソース10種