2010-09-16 15 views
15

Ich möchte Strings als beliebige HTML-Farben darstellen.Wie kann ich Strings in einen HTML-Farbcode-Hash konvertieren?

Beispiel:

"bla bla" = # FFCC00
"Foo Foo 2" = # 565656

Es spielt keine Rolle, was die tatsächliche Farbcode ist, solange es eine gültige hexadezimale ist HTML-Farbcode und das ganze Spektrum ist ziemlich gut vertreten.

Ich denke, der erste Schritt wäre, eine MD5 auf die Zeichenfolge zu tun und dann irgendwie in hexadezimale Farbcode konvertieren?

Aktualisierung: Anwendungsbeispiel besteht darin, einen visuellen Bericht von Dateianforderungen auf einem Server zu generieren. Die Farben müssen nicht hübsch aussehen, es ist eher so, dass ein menschliches Gehirn Muster usw. in den Daten leichter erkennen kann.

+0

Haben Sie eine Zeichenfolge in eine 6-stellige Hex-Code zugeordnet werden soll? – codaddict

+0

Können Sie ein Beispiel geben, wie Sie diese Zeichenfolgen verwenden würden? Warum legst du nicht einfach die Farbcodes in PHP-Variablen? – Mischa

+1

gehen mit codaddict denken: Hash es und nehmen Sie die ersten 6 Bytes? – russau

Antwort

30

Danke für die Hinweise, scheint dies eine kompetente Arbeit zu tun:

function stringToColorCode($str) { 
    $code = dechex(crc32($str)); 
    $code = substr($code, 0, 6); 
    return $code; 
} 

$str = 'test123'; 
print '<span style="background-color:#'.stringToColorCode($str).'">'.$str.'</span>'; 
+0

genau die Lösung, die ich gesucht habe. –

+1

Ein ähnliches Konzept, aber unterschiedliche Hash wurde hier zur Verfügung gestellt: http://stackoverflow.com/questions/15704220/change-random-strings-into-colours-constently Für mich schien es eine vielfältigere Farbkombination bieten. Vielleicht ist die Verteilung der Hashes unterschiedlich für md5() vs dechex (crc32()) – kane

+0

Perfekt. Es funktioniert super! Vielen Dank. – Steffi

16

fast immer nur mit zufälligen Farben werden

  1. schlecht aussehen
  2. Konflikt mit dem Hintergrund

Ich würde empfehlen, eine (longish) Liste von Farben schaffen, die gut zusammenarbeiten und mit Ihr Hintergrund - dann summieren Sie einfach die Zeichenwerte der Zeichenfolge und des Moduls (%) mit der Anzahl der Farben, um einen Index in die Tabelle zu bekommen.

+1

Dies ist die beste Antwort. Sie sollten eine Funktion hinzufügen, damit sie vollständig ist. – Heroselohim

16

Ich stimme mit sje397 darüber überein, dass völlig zufällige Farben am Ende böse aussehen könnten. Anstatt eine lange Liste schön aussehender Farben zu erstellen, würde ich vorschlagen, einen konstanten Sättigungs- und Lumineszenzwert zu wählen und den Farbton basierend auf dem Inhalt zu variieren. Um eine RGB-Farbe aus einer HSL-Farbe zu erhalten, können Sie etwas Ähnliches verwenden, wie in http://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB beschrieben.

Hier ist ein Beispiel (versuchen Sie es in http://codepad.viper-7.com etwas, das, wie https://codepad.remoteinterview.io/ZXBMZWYJFO funktioniert):

<?php 

function hsl2rgb($H, $S, $V) { 
    $H *= 6; 
    $h = intval($H); 
    $H -= $h; 
    $V *= 255; 
    $m = $V*(1 - $S); 
    $x = $V*(1 - $S*(1-$H)); 
    $y = $V*(1 - $S*$H); 
    $a = [[$V, $x, $m], [$y, $V, $m], 
      [$m, $V, $x], [$m, $y, $V], 
      [$x, $m, $V], [$V, $m, $y]][$h]; 
    return sprintf("#%02X%02X%02X", $a[0], $a[1], $a[2]); 
} 

function hue($tstr) { 
    return unpack('L', hash('adler32', $tstr, true))[1]; 
} 

$phrase = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."; 
$words = []; 
foreach (explode(' ', $phrase) as $word) 
    $words[hue($word)] = $word; 
ksort($words); 
foreach ($words as $h => $word) { 
    $col = hsl2rgb($h/0xFFFFFFFF, 0.4, 1); 
    printf('<span style="color:%s">%s</span> ', $col, $word); 
} 
?> 
+4

Mit einem Code-Snippet wäre dies die beste Antwort – iwein

+0

Hinzugefügt das Code-Snippet. – Reinderien

+0

PHP Parse-Fehler: Syntaxfehler, unerwarteter '[' nach $ a wegen der alten PHP-Version. – hozza

0

Ich denke, ich verstehe den Wunsch sehr gut. Ich wollte das Gleiche. Versuchen, eine einzigartige Hintergrundfarbe zu erhalten, die einen Titel darstellt. Ich wollte selbst nichts vordefinieren, ich wollte für jeden Titel einen visuellen Hash erhalten, aber mit Hübschheit. Habe das gefunden, um den Job ziemlich gut zu machen. Sie können die Helligkeit der Farben und Variationen dessen, was sie zurückgibt, ändern. Sie testen es einfach auf Farben, mit denen Sie sich wohlfühlen. Ich denke, jede Farbe sollte für diesen Job gut sein, nur dass die Helligkeit wichtig ist, um sie vom Vordergrund zu unterscheiden.

https://mrkmg.com/blog/2012/01/13/php-function-to-generate-a-color-from-a-text-string/

Geben Sie sich einen String, minimale Helligkeit (0-255) und eine Varianz (2-10), und es wird eine Farbe für die Zeichenfolge generieren. Dieser kann Ihnen schöne Farben geben, wenn Sie ihn optimieren.

+0

Link ist kaputt :( – Jerry

2

Motto:

substr(md5($string), 0, 6); 
Verwandte Themen