カラーバーを表示するHTMLを作成してみました。
準備するもの |
|
~$ seq 1 777777 16000000 | > perl -ne 'printf"<hr size=20 color=#%06x>",$_' > /tmp/a.html
HTMLのhrタグを使うとバーが作成できます。バーのサイズを20にしてカラーコードをseqコマンドでジェネレートすることで、上記のようなカラーバー一覧となるわけです。
カラーコードは0x000000〜0xFFFFFFで指定、10進数にすると0〜16777215ということで、seqの最大値は大雑把に16000000を指定しています。 777777という数字は適当です。ラッキーになるように。
各BYTEの16進と色の割り当ては以下のとおりです。
00は色なし、FFに近いほど色が濃くなります。
さて、冒頭のカラーバーではseqのスキップ数指定によって適当にカラーコードを生成しましたが、次はパターンを決めて3原色の重複組み合わせを求めてカラーコードを生成してみます。
rubyのproductメソッドを使います。productの引数に重複組み合わせを求めたいリストを指定します。複数のリストを指定できます。
その前に、rubyのirb(インタラクティブシェル)で実験してみます。血液型A,B,Oの掛けあわせです。
~$ irb irb(main):001:0> abo=['A','B','O'] => ["A", "B", "O"] irb(main):002:0> abo.product(abo) => [["A", "A"], ["A", "B"], ["A", "O"], ["B", "A"], ["B", "B"], ["B", "O"], ["O", "A"], ["O", "B"], ["O", "O"]] irb(main):003:0>
全部で9パターンでした。
A型は、”A”, “A”と、”A”, “O”と、”O”, “A”
AB型は、”A”, “B” と、”B”, “A”
B型は、”B”, “B”と、”B”, “O”と、”O”, “B”
“O”,”O”だけがO型ですので、O型って貴重な気がしますね。(O型贔屓)
上記irbの実験でproductの使い方のコツを掴みましたので、カラーコードのパターンを生成してみましょう。原色は3種類ですので、以下のように、iroリストを3個掛けます。
iro=[パターン1,パターン2,パターン3]
iro.product(iro,iro)
~$ ruby -e 'iro=[64,160,240];iro.product(iro,iro).collect {|pat| puts "#%02X%02X%02X\n" % pat}' #404040 #4040A0 #4040F0 #40A040 #40A0A0 #40A0F0 #40F040 #40F0A0 #40F0F0 #A04040 #A040A0 #A040F0 #A0A040 #A0A0A0 #A0A0F0 #A0F040 #A0F0A0 #A0F0F0 #F04040 #F040A0 #F040F0 #F0A040 #F0A0A0 #F0A0F0 #F0F040 #F0F0A0 #F0F0F0 ~$
合ってそうです。最後にHTMLを作成するコマンドに手直しします。
~$ ruby -e 'iro=[64,160,240];iro.product(iro,iro).collect {|pat| puts "#%02X%02X%02X" % pat + "<hr size=10 color=#%02X%02X%02X>" % pat }' > /tmp/a.html
以下が生成されたHTMLの表示です。
コメント