Я хотел бы представлять строки как произвольные html–цвета.
Пример:
"blah blah" = # FFCC00
"foo foo 2" = # 565656
Не имеет значения, каков фактический цветовой код, если он является допустимым шестнадцатеричным цветовым кодом HTML, и весь спектр достаточно хорошо представлен.
Я предполагаю, что первым шагом было бы сделать MD5 на строке, а затем каким-то образом преобразовать это в шестнадцатеричный код цвета?
Обновление: пример использования – генерировать визуальный отчет о запросах файлов на сервере. Цвета не должны выглядеть красиво, тем более, что человеческий мозг может легче обнаруживать узоры и т. Д. Данных.
Спасибо за указатели, это, похоже, делает компетентную работу:
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>';
Почти всегда, используя случайные цвета,
Я бы рекомендовал создать (длинный) список цветов, которые хорошо работают вместе и с вашим фоном, – тогда просто суммируйте значения char строки и модуля (%) с вашим количеством цветов, чтобы получить индекс в таблице.
Я согласен с sje397 выше, что вполне случайные цвета могут оказаться неприятными. Вместо того, чтобы делать длинный список красиво выглядящих цветов, я бы предложил выбрать постоянное значение насыщенности + люминесценции и варьировать оттенок на основе содержимого. Чтобы получить цвет RGB из цвета HSL, вы можете использовать что-то похожее на то, что описано в http://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB .
Вот пример (попробуйте в http://codepad.viper-7.com что-то, что работает, например https://codepad.remoteinterview.io/ZXBMZWYJFO ):
<?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); } ?>
Один лайнер:
substr(md5($string), 0, 6);
Думаю, я очень хорошо понимаю это желание. Я хотел того же. Попытка получить уникальный цвет фона, который представляет собой заголовок. Я не хотел ничего предопределять себе, я хотел, чтобы получить визуальный хэш для каждого названия, но с довольно-таки. Нашли это, чтобы сделать работу довольно хорошо. Вы можете изменить яркость цветов и варианты того, что он возвращает. Вы просто проверяете его на цвета, которые вам удобны. Я думаю, что любой цвет должен быть хорош для этой работы, но только яркость имеет значение, чтобы отличить ее от переднего плана.
https://mrkmg.com/blog/2012/01/13/php-function-to-generate-a-color-from-a-text-string/
Дайте ему строку, минимальную яркость (0-255) и дисперсию (2-10), и она будет генерировать цвет для вашей строки. Это может дать вам красивые цвета, если вы настроите их.