随机生成美学上令人愉悦的调色板的算法

Bri*_*aro 296 algorithm colors

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

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

任何想法都会很棒.

Dav*_*row 419

您可以将随机颜色的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;
}
Run Code Online (Sandbox Code Playgroud)


将随机颜色与白色(255,255,255)混合可通过增加亮度同时保持原始色调的色调来创建中性色调.这些随机生成的粉彩通常很好地结合在一起,特别是大量.

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

第一


您还可以将随机颜色与常量柔和色调混合,从而产生一组有色的中性色.例如,使用浅蓝色会创建如下颜色:

第二


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

一些额外的资源:

  • 唯一的警告似乎是失去了可区分性.通过将红绿色和蓝色的平均值与一种颜色(例如白色)相比,自然所有颜色都更接近白色并减少它们之间的差异.例如,如果你看一下第一个截图:当那些果岭彼此相邻时,我当然可以区分它们,但是如果它们在一些生产的图形中不相邻呢?可能有问题. (3认同)

Fgb*_*nch 84

我会使用色轮并给出一个随机位置你可以添加金色角度(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

作为"Paint Inspired Color Compositing".

算法生成颜色,并选择每种新颜色以最大化其与先前所选颜色的欧几里德距离.

在这里你可以找到一个很好的javascript实现:

http://afriggeri.github.com/RYB/

更新2:

Sciences Po Medialb刚刚发布了一款名为"我想要Hue"的工具,可以为数据科学家生成调色板.使用不同的颜色空间并使用k-means聚类或力矢量生成调色板(排斥图)这些方法的结果非常好,它们在其网页中显示了理论和实现.

http://tools.medialab.sciences-po.fr/iwanthue/index.php


mot*_*bói 23

在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;
}
Run Code Online (Sandbox Code Playgroud)

在这里看到了这个想法:http://blog.functionalfun.net/2008/07/random-pastel-colour-generator.html

  • 最初的想法是产生任意令人愉快的颜色.深色调对我来说似乎不太愉快;) (2认同)

Nic*_*son 11

转换到另一个调色板是一种非常优越的方法.他们这样做是有原因的:其他调色板是"感性的" - 也就是说,它们将类似的看似颜色放在一起,调整一个变量会以可预测的方式改变颜色.对于RGB来说,这一切都不是真的,在这些颜色之间没有明显的关系.


com*_*ble 5

一个不容忽视的答案,因为它简单且具有优势,就是现实生活照片和绘画的采样。在现代艺术图片、塞尚、梵高、莫奈、照片的缩略图上采样尽可能多的随机像素,随机颜色……优点是您可以按主题获取颜色,而且它们是有机颜色。只需将 20 - 30 张图片放在一个文件夹中,然后每次随机抽取一张随机图片。

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


Int*_*lFX 5

使用不同的颜色

用 JavaScript 编写。

它生成视觉上不同颜色的调色板。

unique-colors 是高度可配置的:

  • 选择调色板中有多少种颜色
  • 将色调限制在特定范围内
  • 将色度(饱和度)限制在特定范围
  • 将亮度限制在特定范围内
  • 配置调色板的总体质量


Mor*_*rty 5

我已经成功使用TriadMixingCIE94避免了相似的颜色。下图使用红色,黄色和白色作为输入颜色。看这里

TriadMixing + CIE94