« 遅くに寿司を食ってきた | メイン | へんな時間に目が覚めた »
2005年11月12日
黒と白を決めるサブルーチン
Google AdSense の代替広告用の CGI を作っています。データは Amazon Web Services を使うことになると思うのですが、デザインを Google AdSense に似せてみようと思います。
Google AdSense は、枠線のカラーを決めると、自動的に Ads by Goooooogle のカラーを #000000 か #FFFFFF に決めてくれます。これは、どういう仕組みで判定しているのだろうかと、調べてみた。
結構、簡単な仕組みでした。
明るさ=R×0.30+G×0.59+B×0.11
この式で明るさが決まるらしい。明るさは、与えられる RGB の範囲で決まりますが、大概は 0〜255 だと思います。
Perl にて、サブルーチンも作成。
sub get_powered_link_color { my ($border_color) = @_; my ($powered_link_color); if ($border_color =~ /^#([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/) { my ($r, $g, $b) = (hex $1, hex $2, hex $3); if ($r * 0.3 + $g * 0.59 + $b * 0.11 < 127) { $powered_link_color = '#FFFFFF'; } else { $powered_link_color = '#000000'; } } return $powered_link_color; }
与える引数は、枠線色のRGB値(ex. #74F17A)です。返り値は、テキスト色に使ったらよいRGB値です。とはいっても、2色しかないんですが。引数の値がおかしいと、返り値は undef となります。
hex を使って、16進数の値を10進数に変換しています。
ついでに、補色を取得するサブルーチンも作ってみた。
sub get_complementary_color { my ($before_color) = @_; my ($after_color); if ($before_color =~ /^#([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/) { my ($r, $g, $b) = (hex $1, hex $2, hex $3); $after_color = sprintf "#%02lx%02lx%02lx", 255 - $r, 255 - $g, 255 - $b; } return $after_color; }
補色っていうのは、ある色の対極にある色です。混ぜると、白色になる色の組み合わせ(絵の具だと灰色かな)が、補色の関係にあります。補色を知ると、どんないいことがあるのか?ということですが、基本的に、背景色の補色をテキストカラーにすると、そのテキストが目立ちます。
自分専用の Amazon Search を作れないかと奮闘中。後ほど、ソースの公開や、サービスとして提供できればいいなと妄想中。
【関連記事】
・Google AdSense を導入しました (2005年11月10日)
【関連情報】
・モノクロ(単一色)階調表現への変換
http://www.sm.rim.or.jp/~shishido/monog.html
2005年11月12日 22:13 | Programming
トラックバック
コメント
灰色の補色は灰色なので、目立ちません。
赤青緑それぞれ2階調にしてから反転すれば目立つのでは?
投稿者 yach : 2005年11月13日 19:18