繁体   English   中英

如何将artbitrary数字转换为rgb颜色?

[英]How to convert artbitrary number to rgb color?

我有一个大约有一百个用户的应用程序。 我们有一个日历视图,其中每个用户可以有多个条目。 同一用户的每个条目应具有相同的颜色,但不同的用户应具有不同的颜色。 目前我们在一个数组中手动​​定义了大约25种颜色,用户得到的颜色由下式确定

$color = $colors[$userid % count($colors)];

我们不想为每个新用户手动添加颜色,为每个用户选择颜色似乎也有点乏味。

是否有一个简单的函数将数字(用户ID)映射到颜色(最好是RGB)? 下一个问题是: 有没有办法将函数限制为某种类型的颜色(即只有白色字母可读的颜色)?

我本身没有解决方案,而是一个建议。

首先,由于您希望每个用户的颜色都是唯一但随机的,您可以开始使用某种数字哈希函数。 这会得到一个最有可能是随机数的随机数。 如果您的哈希函数是合适的,并且您的用户数百个就足够了。

现在您需要将其转换为颜色,最好是在光谱的暗端。 如果使用RGB,则需要三个数字。 为了让它们保持黑暗,让我们说你保持总数或者R,G和B低于200.这当然是猜测,但它应该是非常黑暗的。 选择1到3之间的随机数[index] - 这是你要开始的R,G或B. 获取0到200之间的数字,并将其记录为颜色[index1]。 现在选择剩下的一个索引,1-3。 为此,选择一个介于0和颜色[index1]之间的数字。 将剩余数字设置为200色[index1] -color [index2]。 现在你有一个随机的RGB值,应与白色对比。

我意识到我从来没有从前面的哈希函数中得到太多的使用 - 也许放弃它并且只使用userid作为随机(种子)。

您希望在色调饱和度 - 亮度或色调 - 饱和度 - 值(HSL或HSV)空间中工作。

http://en.wikipedia.org/wiki/HSL_and_HSV

首先根据色调和饱和度定义一些颜色,然后将亮度设置为使文本可读的最高可容忍水平。

然后,您可以修复这些颜色的色调和饱和度,并降低亮度。

所以说你开始选择25种可容忍的颜色,具有不同的色调和最大/最小可容忍的亮度。

要为索引生成颜色,请选择以base = id % 25开头的基色然后根据该颜色index = (Math.floor(id/25))的索引降低亮度index = (Math.floor(id/25)) 根据该值将亮度设置在容许亮度范围内。 因此,假设每种颜色有5个亮度值,将亮度设置为

lightness = maxLightness - index*(maxLightness / 4*minLightness)

这简单地改变了每种颜色的亮度。 如果您愿意,可以选择稍微改变饱和度和色调。 HSV和RGB之间的转换是一个记录良好的程序。

PHP HSV对RGB公式的理解

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM