Comment générer une couleur en fonction de quelle lettre commence une chaîne - peut-être A pourrait être bleu, Z pourrait être vert et les autres lettres seraient le spectre changeant progressivement entre les deux?Générer des couleurs basées sur des lettres en PHP
Répondre
$str = iconv("CURRENT CHARSET HERE", "ASCII//TRANSLIT", $orig_string);
$letter = ucfirst($str);
//A is 65, Z is 90
$hue = 2*pi() * ((ord($letter) - 65)/(90-65));
C'est vous donnera la teinte en radians. Ensuite, il suffit de choisir une certaine saturation et luminosité et de convertir en RVB ou autre. Voir wikipedia.
Vous allez certainement vouloir utiliser HSV, car il est trivial de passer en douceur d'une teinte à l'autre dans cet espace.
Probablement pas le code le plus efficace au monde, mais voilà. Il y a une petite page de test en bas du code que vous pouvez supprimer/ignorer, bien sûr.
<?php
// RGB_TO_HSV copied from http://www.actionscript.org/forums/showthread.php3?t=50746
function HSV_TO_RGB ($H, $S, $V) // HSV Values:Number 0-1
{ // RGB Results:Number 0-255
$RGB = array();
if($S == 0)
{
$R = $G = $B = $V * 255;
}
else
{
$var_H = $H * 6;
$var_i = floor($var_H);
$var_1 = $V * (1 - $S);
$var_2 = $V * (1 - $S * ($var_H - $var_i));
$var_3 = $V * (1 - $S * (1 - ($var_H - $var_i)));
if ($var_i == 0) { $var_R = $V ; $var_G = $var_3 ; $var_B = $var_1 ; }
else if ($var_i == 1) { $var_R = $var_2 ; $var_G = $V ; $var_B = $var_1 ; }
else if ($var_i == 2) { $var_R = $var_1 ; $var_G = $V ; $var_B = $var_3 ; }
else if ($var_i == 3) { $var_R = $var_1 ; $var_G = $var_2 ; $var_B = $V ; }
else if ($var_i == 4) { $var_R = $var_3 ; $var_G = $var_1 ; $var_B = $V ; }
else { $var_R = $V ; $var_G = $var_1 ; $var_B = $var_2 ; }
$R = $var_R * 255;
$G = $var_G * 255;
$B = $var_B * 255;
}
$RGB['R'] = $R;
$RGB['G'] = $G;
$RGB['B'] = $B;
return $RGB;
}
function getColorForWord($word) {
// get the percent of the first letter ranging from 0-1
$first_letter_code = (ord(strtolower($word[0]))-97)/25.0;
// add a phase depending on where you want to start on the color spectrum
// red is 0, green is 0.25, cyan is 0.5, blue is ~0.75, and 1 is back to red
$hue = $first_letter_code + 0.25;
// you may also want to divide by how much of the spectrum you want to cover
// (making the colors range only from green to blue, for instance)
// but i'll leave that as an exercise
// constrain it to 0-1
if ($hue > 1.0)
$hue -= 1.0;
// the second value is the saturation ("colorfulness", ranging from gray to fully-colored)
// the third is the value (brightness)
$rgb = HSV_TO_RGB($hue, 1, 0.75);
$hexstring = "#";
foreach ($rgb as $c)
$hexstring .= str_pad(dechex($c), 2, "0", STR_PAD_LEFT);
return $hexstring;
}
?>
<html>
<head>
</head>
<body>
<form method="POST" action="<?=$_SERVER["PHP_SELF"]?>">
<input type="text" name="target_word" />
<?php
if ($_REQUEST["sub"] && $_REQUEST["target_word"] != "") {
print "<span style=\"font-weight: bold; color: ".getColorForWord($_REQUEST["target_word"]).";\">".$_REQUEST["target_word"]."</span>";
}
?>
<br />
<input type="submit" name="sub" value="Colorize" />
</form>
</body>
Je préciserais le code RVB de la première couleur (100100100) et le code RVB de la dernière couleur (200200200) et faire essentiellement
1..25 B..Y
resultR = firstR + (lastR-firstR) * (1.25/26) resultG = premierG + (lastG-firstG) * (1..25 / 26) resultB = premierB + (dernierB-premierB) * (1.25/26)
donc B donnerait 100 + étage ((200-100) * (1/26)) 104.104.104
et Y serait de 100 + étage ((200-100) * (1/26)) 196.196.196
Ceci est un code de base, mais il permettra de gradient tous les 3 couleurs, ou seulement 1 (exemple 100,100,100 à 100,100,200) qui ferait un dégradé vers le bleu
- 1. Générer des couleurs uniques
- 2. Générer des images personnalisées basées sur le texte tapé
- 3. Couleurs génériques WPF basées sur SystemColors
- 4. Un moyen de générer automatiquement des structures basées sur QSharedData?
- 5. PHP travail sur la saturation des couleurs
- 6. Vues basées sur des vues basées sur etc
- 7. Générer des informations basées sur le contenu de RoR, des idées là-dessus?
- 8. Générer dynamiquement des pages aspx basées sur des fichiers de contenu xml et une page maître
- 9. Convertir des nombres en nombres et lettres en PHP
- 10. Que dois-je utiliser pour générer et imprimer des lettres
- 11. comment générer des limaces en php
- 12. Gestion des couleurs en Python
- 13. Images dynamiques basées sur le texte PHP
- 14. Construire des conditions de recherche basées sur des contextes d'exécution
- 15. php: sessions basées sur les cookies
- 16. Générer des combinaisons PHP pour la taille et la couleur
- 17. En utilisant SOAP pour générer des attributs XML en PHP
- 18. Générer un schéma de base de données et charger des données basées sur un fichier XML?
- 19. Génération de classes basées sur des machines d'état boost
- 20. lettres de bande en php
- 21. En utilisant SOAP pour générer des attributs XML en PHP
- 22. WatiN et en tapant des lettres majuscules
- 23. Mise en majuscule des lettres minuscules
- 24. Comment enregistrer des couleurs personnalisées sur UserDefaults
- 25. Mettre des couleurs sur une image en C#
- 26. Générer des questions en fonction du mot-clé dans php
- 27. Transition des couleurs UINavigationBar?
- 28. Code PHP pour générer des icônes
- 29. Générer des traps SNMP avec PHP
- 30. Assistant NetBeans pour générer des classes PHP
Quel format de sortie voulez-vous que la couleur soit? CMJN, RVB, HSV, Hex, ...? – Gordon
Salut, HEX ou RGB de préférence mais je peux probablement comprendre comment convertir d'autres formats – usertest
Que voulez-vous dire par * générer une couleur basée sur quelle lettre une chaîne commence par *. Si vous attribuez A à bleu et Z à vert, les lettres b à y seront toujours des dégradés du bleu au vert. Est-ce que c'est ce que tu veux? – Gordon