ruby色发生器

我需要为待办事项列表中的多个项目随机生成颜色。

(比如从学校接孩子,拿干洗等等)

在ruby中做到这一点的最佳方法是什么,还要避免难以看到的颜色(如灰色,白色等)?

使用RGB你会更难以避免灰色,以及“难以看到”的颜色(我在白色背景上猜测)

如果您需要它们是随机的,您可以使用HSV值远离白色,灰色和黑色光谱。 这意味着您可以在值和饱和度参数中设置范围(例如,~175到255),而可以随机自由选择色调。

所以,这可能有效:

def random_bright_color(threshold = 175) hue = rand(256 - threshold) + threshold saturation = rand(256 - threshold) + threshold value = rand(256) hsv_to_rgb(hue, saturation, value) end 

哪里

 def hsv_to_rgb(h, s, v) if s == 0 r = g = b = (v * 2.55).round else h /= 60.0 s /= 100.0 v /= 100.0 i = h.floor f = h - i p = v * (1 - s) q = v * (1 - s * f) t = v * (1 - s * (1 - f)) rgb = case i when 0 then [v, t, p] when 1 then [q, v, p] when 2 then [q, v, t] when 3 then [p, q, v] when 4 then [t, p, v] else [v, p, q] end end rgb.map{|color| (color * 255).round} end 

从这里移植,解释可以在同一篇维基百科文章中找到


但是,如果你还需要彼此不同的随机颜色,也许真正的解决方案是从一组基色中选择它们,并从该组中随机选择。

要生成RGBforms的随机颜色,您只需要随机生成三个组件中的每一个(如rand(256)三次)。

如果你不希望颜色太亮,有很多方法可以确保颜色。 例如,允许每个组件仅为其正常范围的一半( rand(128) )。 由于较大的数字表示较亮的颜色,因此您不会获得白色,米色或任何其他“难以看见”的颜色。

您还可以要求所有组件的总和足够小或发明一些其他度量标准。 例如, 在这里您可以找到一些更准确的“亮度”公式。

但是如果你只需要有限数量的颜色(如10或16),那么准备清单(蓝色,绿色,橙色,栗色,紫罗兰色等)并从中选择颜色似乎更好。

你需要多少种不同的颜色?

由于难以随机生成合适的颜色,因此请预先选择颜色的固定调色板,然后您可以随机选择。