Создайте шестнадцатеричный цвет на основе строки с помощью JavaScript - PullRequest
117 голосов
/ 06 августа 2010

Я хочу создать функцию, которая будет принимать любую старую строку (обычно это одно слово) и из этого каким-то образом генерирует шестнадцатеричное значение между #000000 и #FFFFFF, поэтому я могу использоватьэто как цвет для элемента HTML.

Возможно, даже сокращенное шестнадцатеричное значение (например: #FFF), если это менее сложно.Фактически, цвет из палитры «web-safe» был бы идеальным.

Ответы [ 12 ]

0 голосов
/ 09 июня 2019

Я конвертирую это для Java.

Танки для всех.

public static int getColorFromText(String text)
    {
        if(text == null || text.length() < 1)
            return Color.BLACK;

        int hash = 0;

        for (int i = 0; i < text.length(); i++)
        {
            hash = text.charAt(i) + ((hash << 5) - hash);
        }

        int c = (hash & 0x00FFFFFF);
        c = c - 16777216;

        return c;
    }
0 голосов
/ 09 марта 2018

Эта функция делает свое дело. Это адаптация этого, довольно длинного внедрения этого репо ..

const color = (str) => {
    let rgb = [];
    // Changing non-hexadecimal characters to 0
    str = [...str].map(c => (/[0-9A-Fa-f]/g.test(c)) ? c : 0).join('');
    // Padding string with zeroes until it adds up to 3
    while (str.length % 3) str += '0';

    // Dividing string into 3 equally large arrays
    for (i = 0; i < str.length; i += str.length / 3)
        rgb.push(str.slice(i, i + str.length / 3));

    // Formatting a hex color from the first two letters of each portion
    return `#${rgb.map(string => string.slice(0, 2)).join('')}`;
}
...