
カラーバーを表示する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の表示です。


コメント