我正在寻找一种简单的算法来生成大量随机的、美观的颜色。所以没有疯狂的霓虹灯颜色,让人联想到粪便的颜色等等。

我已经找到了这个问题的解决方案,但它们依赖于替代调色板而不是RGB。 我宁愿直接使用RGB,而不是来回映射。这些其他解决方案也最多只能生成32种左右令人愉悦的随机颜色。

任何想法都很好。


当前回答

在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

其他回答

一个不应该被忽视的答案,因为它简单而有优势,就是对现实生活中的照片和绘画进行采样。在现代艺术图片、塞尚、梵高、莫内、照片的缩略图上随机选取你想要的任意数量的像素。这样做的好处是,您可以根据主题获取颜色,而且它们是有机颜色。只要把20 - 30张照片在一个文件夹和随机抽样随机PIC每次。

转换到HSV值是一种广泛的代码算法心理基于调色板。HSV更容易随机化。

我已经成功地使用triadmix和CIE94来避免相似的颜色。下图使用的输入颜色为红色、黄色和白色。在这里看到的。

使用色彩分明的颜色。

用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

您可以将随机颜色的RGB值与常量颜色的RGB值平均:

(以Java为例)

public Color generateRandomColor(Color mix) {
    Random random = new Random();
    int red = random.nextInt(256);
    int green = random.nextInt(256);
    int blue = random.nextInt(256);

    // mix the color
    if (mix != null) {
        red = (red + mix.getRed()) / 2;
        green = (green + mix.getGreen()) / 2;
        blue = (blue + mix.getBlue()) / 2;
    }

    Color color = new Color(red, green, blue);
    return color;
}

将随机颜色与白色(255,255,255)混合,通过增加明度而保持原始颜色的色调来创建中性的粉彩。这些随机生成的粉彩通常搭配得很好,尤其是大量使用时。

下面是使用上述方法生成的一些柔和的颜色:

你也可以把随机的颜色和固定的粉彩混合在一起,这样就得到了一组中性的颜色。例如,使用浅蓝色可以创建如下颜色:

更进一步,您可以在生成器中添加考虑互补色或阴影级别的启发式,但这一切都取决于您想要使用随机颜色获得的印象。

一些额外的资源:

http://en.wikipedia.org/wiki/Color_theory http://en.wikipedia.org/wiki/Complementary_color