310 votes

Algorithme pour générer de façon aléatoire une palette de couleurs esthétiquement plaisantes

Je cherche un algorithme simple pour générer un grand nombre de couleurs aléatoires et esthétiques. Donc pas de couleurs néon folles, de couleurs rappelant les excréments, etc.

J'ai trouvé des solutions à ce problème, mais elles s'appuient sur des palettes de couleurs autres que RVB. Je préférerais utiliser le RVB pur et simple plutôt que de faire des allers-retours. Ces autres solutions ne peuvent également générer qu'environ 32 couleurs aléatoires agréables.

Toute idée serait la bienvenue.

3 votes

Je ferais un site web qui génère une couleur aléatoire à chaque visite. Faire un vote "cette couleur est géniale" / "cette couleur est nulle". Puis trier par rapport au nombre de votes.

0 votes

Vous pourriez vérifier HSL et HSV.

53 votes

"des couleurs qui rappellent les excréments" J'adore ça.

433voto

David Crow Points 7704

Vous pourriez faire la moyenne des valeurs RVB de couleurs aléatoires avec celles d'une couleur constante :

(exemple en 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;
}

Le mélange de couleurs aléatoires avec du blanc (255, 255, 255) crée des pastels neutres en augmentant la luminosité tout en conservant la teinte de la couleur d'origine. Ces pastels générés de manière aléatoire vont généralement bien ensemble, surtout en grand nombre.

Voici quelques couleurs pastel générées à l'aide de la méthode ci-dessus :

First

Vous pouvez également mélanger la couleur aléatoire avec un pastel constant, ce qui donne un ensemble teinté de couleurs neutres. Par exemple, en utilisant un bleu clair, on obtient des couleurs comme celles-ci :

Second

En allant plus loin, vous pourriez ajouter des heuristiques à votre générateur qui prennent en compte les couleurs complémentaires ou les niveaux d'ombrage, mais tout dépend de l'impression que vous voulez obtenir avec vos couleurs aléatoires.

Quelques ressources supplémentaires :

3 votes

La seule réserve semble être la perte de distinction. En prenant la moyenne du rouge, du vert et du bleu avec une couleur comme le blanc, naturellement toutes les couleurs se rapprochent du blanc et réduisent les différences entre elles. Par exemple, si vous regardez la première capture d'écran : Quand ces verts sont l'un à côté de l'autre, je peux sûrement les distinguer, mais qu'en est-il s'ils ne sont pas adjacents dans un graphique produit ? Cela pourrait poser problème.

0 votes

Lorsque vous générez un composant de couleur aléatoire, essayez de restreindre la limite supérieure avec quelque chose de moins, comme 200.

88voto

Fgblanch Points 1805

J'utiliserais une roue des couleurs et, étant donné une position aléatoire, vous pourriez ajouter l'angle d'or (137,5 degrés).

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

afin d'obtenir à chaque fois des couleurs différentes qui ne se chevauchent pas.

En réglant la luminosité de la roue des couleurs, vous pouvez également obtenir différentes combinaisons de couleurs claires et sombres.

J'ai trouvé cet article de blog qui explique très bien le problème et la solution en utilisant le nombre d'or.

http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/

UPDATE : Je viens de trouver cette autre approche :

Elle s'appelle la méthode RYB (rouge, jaune, bleu) et est décrite dans cet article :

http://threekings.tk/mirror/ryb_TR.pdf

comme "Paint Inspired Color Compositing".

L'algorithme génère les couleurs et chaque nouvelle couleur est choisie pour maximiser sa distance euclidienne par rapport aux couleurs précédemment sélectionnées.

Vous trouverez ici une bonne implémentation en javascript :

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

UPDATE 2 :

La médiathèque de Sciences Po vient de publier un outil appelé "I want Hue" qui génère des palettes de couleurs pour les scientifiques des données. Ils utilisent différents espaces de couleurs et génèrent les palettes en utilisant le clustering k-means ou les vecteurs de force (graphes de répulsion). Les résultats de ces méthodes sont très bons, ils montrent la théorie et une implémentation dans leur page web.

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

0 votes

IWantHue est la réponse. Allez-y. Laissez-vous surprendre.

23voto

motobói Points 370

En 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;
}

J'ai vu l'idée ici : http://blog.functionalfun.net/2008/07/random-pastel-colour-generator.html

0 votes

Ce n'est pas tout à fait exact : il faut aussi mettre à zéro les nombres à un chiffre... Quoi qu'il en soit, voici un bidule fonctionnel pour les curieux : jsfiddle.net/RedDevil/LLYBQ ----- Grattez ça... Je n'avais pas remarqué le bit +127... Mais alors cela ne générera pas de nuances sombres.

2 votes

L'idée originale était de générer des couleurs arbitrairement agréables. Les teintes sombres ne me semblent pas agréables ;)

11voto

Nick Johnson Points 79909

La conversion vers une autre palette est un moyen bien supérieur de le faire. Il y a une raison à cela : les autres palettes sont "perceptuelles", c'est-à-dire qu'elles regroupent des couleurs apparemment similaires et que l'ajustement d'une variable modifie la couleur de manière prévisible. Rien de tout cela n'est vrai pour la palette RVB, où il n'y a pas de relation évidente entre les couleurs qui "vont bien ensemble".

5voto

ufomorace Points 410

Une réponse à ne pas négliger, parce qu'elle est simple et présente des avantages, est l'échantillonnage de photos et de peintures de la vie réelle. échantillonnez autant de pixels aléatoires que vous voulez des couleurs aléatoires sur des vignettes de photos d'art moderne, cézanne, van gogh, monnet, photos... l'avantage est que vous pouvez obtenir des couleurs par thème et que ce sont des couleurs organiques. mettez simplement 20 - 30 photos dans un dossier et échantillonnez une photo aléatoire à chaque fois.

La conversion en valeurs HSV est un algorithme de codage très répandu pour la palette à base psychologique. hsv est plus facile à randomiser.

1 votes

mkweb.bcgsc.ca/color_summarizer/?analyser Voici un outil en ligne qui peut analyser des photos réelles et vous renvoie un graphique des valeurs RVB ; dites-vous que vous pouvez avoir une idée de ce que les photos réelles ont dans leurs graphiques.... site web extrêmement utile, qui est essentiel si vous essayez de concevoir des algorithmes avant-gardistes pour les couleurs aléatoires-.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X