7
votes

PHP génère RVB

Je suis confronté à cette situation où j'ai une pièce d'identité qui provient d'une base de données (il peut donc être de 1, 100, 1000, ...) et je dois générer des couleurs aléatoires, mais l'égalité d'identification égale devrait entraîner la même chose. couleur.

Toute suggestion sur la façon dont je peux y parvenir?

Merci!


2 commentaires

Avez-vous un code (ou un pseudocode) écrit jusqu'à présent?


Qu'en est-il de la fractionnement du peu? Bit0-> bit7 de r, bit1-> bit7 de g, bit2-> bit7 de b, bit3-> bit6 de r, ... pendant que cela est compliqué, il donne des couleurs très différentes, tant que l'espace d'identification n'est pas trop grand.


4 Réponses :


1
votes

L'approche évidente consiste à convertir l'identifiant en une couleur (par exemple, les 8 bits inférieurs sont le bleu, les 8 bits suivants sont verts, les 8 suivants sont rouges - laissez 8 bits, mais je suis sûr que vous pouvez comprendre cela; -)

En supposant que cela ne fonctionne pas (parce que vous vous retrouvez avec une horrible palette de couleurs: Utilisez une matrice (ou une table de hachage) pour créer une cartographie des identifiants aux couleurs.

Si vous craignez qu'il y ait trop d'identifiants, vous pouvez appliquer un hash à l'ID et l'utiliser comme vous avez la clé de la cartographie «ID à la couleur». Dans ce cas, vous disez efficacement qu'un identifiant a toujours une couleur, mais une couleur peut être utilisée par de nombreux identifiants.


0 commentaires

34
votes

Utilisez un hachage cryptographique et clipez les octets dont vous n'avez pas besoin: xxx

le résultat ( code pour générer ) ressemble à ceci pour les chiffres 0-20:

sortie de démonstration


0 commentaires

3
votes
<?php 
// someting like this?
$randomString = md5($your_id_here); // like "d73a6ef90dc6a ..."
$r = substr($randomString,0,2); //1. and 2.
$g = substr($randomString,2,2); //3. and 4.
$b = substr($randomString,4,2); //5. and 6.
?>
<style>
#topbar { border-bottom:4px solid #<?php echo $r.$g.$b;  ?>; }
</style>

0 commentaires

0
votes

Si la matrice est toujours triée, vous pouvez utiliser cette algorythm jusqu'à 250 éléments:

<?php
function getRGBColorString( $array )
{
    $indexColor = round( 250 / count( $array ) );
    $iterator = 1;

    $arrayOfRGB = array();

    foreach( $array as $item)
    {   
        $arrayOfRGB[] = "rgb(" . ( $indexColor * $iterator ) . ", 113, 113 )";
        $iterator++;
    }  

    return $arrayOfRGB;
}

?>


0 commentaires