我需要生成隨機顏色。但我需要pstel的。不要太黑,不要太亮。生成柔和的顏色
我可以生成的顏色是這樣的:
color = (1..3).to_a.map{ (c = rand(255).to_s(16)).size < 2 ? "0#{c}" : c }.to_s
但它會從所有調色板返回顏色。
我需要生成隨機顏色。但我需要pstel的。不要太黑,不要太亮。生成柔和的顏色
我可以生成的顏色是這樣的:
color = (1..3).to_a.map{ (c = rand(255).to_s(16)).size < 2 ? "0#{c}" : c }.to_s
但它會從所有調色板返回顏色。
試試這個:
start_color = 128 # minimal color amount
total_offset = 64 # sum of individual color offsets above the minimal amount
'#' +
[0, rand(total_offset), rand(total_offset), total_offset].sort.each_cons(2).map{|a,b|
"%02x" % (start_color+b-a)
}.join
其實,這裏的微小西納特拉的應用程序,你可以玩,並立即看到結果:
require 'sinatra'
def get_pastel start_color, total_offset
'#' +
[0, rand(total_offset), rand(total_offset), total_offset].sort.each_cons(2).map{|a,b|
"%02x" % (start_color+b-a)
}.join
end
get '/:start_color/:total_offset' do |start_color, total_offset|
(0..20).map{c = get_pastel(start_color.to_i, total_offset.to_i)
"<span style='background-color:#{c}'>#{c}</span>\n"
}.join
end
然後火起來的瀏覽器,看看它的外觀:
;)
這可能會給你一些有用的東西:
colour_range = 128
colour_brightness = 64
color = (1..3).to_a.map{ (c = rand(colour_range)+colour_brightness.to_s(16)).size < 2 ? "0#{c}" : c }.to_s
我認爲它會限制你的飽和,中等亮度的色彩中旬。
Ruby的Range類包括可枚舉模塊,這意味着你在這裏呼籲.to_a是多餘的。/pedantry – noodl 2010-12-09 17:29:33
另外,`String#%`更適合輸出零填充十六進制。 – 2010-12-09 17:35:58
好了,現在閱讀本:http://en.wikipedia.org/wiki/Color_theory – fl00r 2010-12-09 14:11:32