« 2005年11月11日 | メイン | 2005年11月13日 »
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
22:13 | コメント (1) | トラックバック | Programming
遅くに寿司を食ってきた
回転寿司もなかなか。ということで、昨日(11日)の食事内容です。
昼は、オニオンリングを食べる。事前にパンを食べたので、テリヤキチキンバーガーを食べる気にはならなかった。そろそろ、店員に顔を覚えられてるかも。
夜は、はま寿司に行ってきましたよ。閉店の1時間前だったけど、結構客が入ってた。客席においてあるタッチパネルで注文商品がもうすぐ届くよー。って教えてくれるのですが、いまいち使い物にならない…
モスバーガー (昼)
オニオンリング, コーラ
はま寿司 (夜)
いろいろ