我正在寻找一种简单的算法来生成大量随机的、美观的颜色。所以没有疯狂的霓虹灯颜色,让人联想到粪便的颜色等等。
我已经找到了这个问题的解决方案,但它们依赖于替代调色板而不是RGB。 我宁愿直接使用RGB,而不是来回映射。这些其他解决方案也最多只能生成32种左右令人愉悦的随机颜色。
任何想法都很好。
我正在寻找一种简单的算法来生成大量随机的、美观的颜色。所以没有疯狂的霓虹灯颜色,让人联想到粪便的颜色等等。
我已经找到了这个问题的解决方案,但它们依赖于替代调色板而不是RGB。 我宁愿直接使用RGB,而不是来回映射。这些其他解决方案也最多只能生成32种左右令人愉悦的随机颜色。
任何想法都很好。
当前回答
我会使用色轮并在任意位置加上黄金角(137.5度)
http://en.wikipedia.org/wiki/Golden_angle
为了每次都能得到不重叠的不同颜色。
调整颜色轮的亮度,你也可以得到不同的亮/暗颜色组合。
我发现这篇博客文章很好地解释了这个问题和使用黄金比例的解决方案。
http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/
更新:我刚刚发现了另一种方法:
它被称为RYB(红黄蓝)方法,本文对其进行了描述:
http://threekings.tk/mirror/ryb_TR.pdf
作为“油漆灵感的颜色合成”。
算法生成颜色,并选择每个新颜色以最大化其与先前选择的颜色的欧几里得距离。
在这里你可以找到一个很好的javascript实现:
http://afriggeri.github.com/RYB/
更新2:
巴黎政治学院刚刚发布了一个名为“I want Hue”的工具,可以为数据科学家生成调色板。使用不同的颜色空间,并通过使用k-means聚类或力向量(斥力图)生成调色板,这些方法的结果非常好,他们在他们的网页上展示了理论和实现。
http://tools.medialab.sciences-po.fr/iwanthue/index.php
其他回答
在javascript中:
function pastelColors(){
var r = (Math.round(Math.random()* 127) + 127).toString(16);
var g = (Math.round(Math.random()* 127) + 127).toString(16);
var b = (Math.round(Math.random()* 127) + 127).toString(16);
return '#' + r + g + b;
}
在这里看到了这个想法:http://blog.functionalfun.net/2008/07/random-pastel-colour-generator.html
使用色彩分明的颜色。
用javascript编写。
它生成了一个视觉上不同颜色的调色板。
Distinct-colors是高度可配置的:
选择调色板中有多少种颜色 将色调限制在一个特定的范围内 限制色度(饱和度)到一个特定的范围 将亮度限制在一个特定的范围内 配置调色板的一般质量
从算法上很难得到你想要的东西——人们研究颜色理论已经很长时间了,他们甚至不知道所有的规则。
然而,有一些规则可以用来剔除糟糕的颜色组合(例如,有冲突的颜色和选择互补的颜色的规则)。
我建议你去图书馆的艺术区看看关于色彩理论的书籍,在你尝试一个好颜色之前更好地理解什么是好颜色——看起来你甚至不知道为什么某些组合有效,而另一些则不行。
亚当
在php中:
function pastelColors() {
$r = dechex(round(((float) rand() / (float) getrandmax()) * 127) + 127);
$g = dechex(round(((float) rand() / (float) getrandmax()) * 127) + 127);
$b = dechex(round(((float) rand() / (float) getrandmax()) * 127) + 127);
return "#" . $r . $g . $b;
}
来源:https://stackoverflow.com/a/12266311/2875783
我已经成功地使用triadmix和CIE94来避免相似的颜色。下图使用的输入颜色为红色、黄色和白色。在这里看到的。