红宝石色发生器

时间:2010-09-26 22:14:03

标签: html ruby colors

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

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

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

3 个答案:

答案 0 :(得分:5)

使用RGB,您将更难以避免灰色,以及“难以看清”的颜色(我猜是在白色背景上)

如果您需要它们是随机的,您可以使用HSV values远离白色,灰色和黑色光谱。这意味着你可以在值和饱和度参数中设置一个范围(例如,~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

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


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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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

由于难以随机生成合适的颜色,请预先选择修复palette of colors,然后您可以随机选择。