Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.06.2010, 02:54
Кандидат Javascript-наук
Отправить личное сообщение для Бобр Посмотреть профиль Найти все сообщения от Бобр
 
Регистрация: 03.11.2008
Сообщений: 116

Инверсия цвета
Как сделать инверсию цвета на обратный? То есть FFFFFF на 000000, FEFEFE на 010101 и так далее. Проблема в том, что цвет может быть задан не только цифрой, но и словом, например:

<font color=#FF7F50>test1</font>
<font color=Blue>test2</font>


Как это Blue можно перевести в цифру? Существует ли какой-нибудь простой способ инверсии? Чтобы не заморачиваться на написание огромного кода перевода?
Ответить с цитированием
  #2 (permalink)  
Старый 17.06.2010, 03:18
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от Бобр
Как это Blue можно перевести в цифру?
Составить словарь зарезервированных значений, их не так уж и много.

Сообщение от Бобр
Проблема в том, что цвет может быть задан не только цифрой, но и словом
Еще может быть короткая запись:
<font  color=#f00>test1</font>

Но особой проблемы нет, регулярные выражения в помощь.

Инверсия осуществляется следующим образом:
var r = "fe", g = "fe", b = "fe";

r = (255 - parseInt(r, 16)).toString(16);
g = (255 - parseInt(g, 16)).toString(16);
b = (255 - parseInt(b, 16)).toString(16);

alert([r,g,b]); // осталось только нолики дописать
Еще как-то можно через побитовое отрицание ~ сделать.
Ответить с цитированием
  #3 (permalink)  
Старый 17.06.2010, 03:30
Кандидат Javascript-наук
Отправить личное сообщение для Бобр Посмотреть профиль Найти все сообщения от Бобр
 
Регистрация: 03.11.2008
Сообщений: 116

Сообщение от Octane Посмотреть сообщение
Составить словарь зарезервированных значений, их не так уж и много.
Нет, их целый вагон. http://vvz.nw.ru/Lessons/HTML_Colors/HTMLcolors_HSB.htm

Поэтому я и интересуюсь простым способом получить цифру соответствующую цвету.
Ответить с цитированием
  #4 (permalink)  
Старый 17.06.2010, 05:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

инверсия цвета
инверсия цвета -- цвет можно из Lime , #00FF00, rgb(0,255,0) или rgb(0%,100%,0%) или #FAE по мотивам http://www.tigir.com/javascript.htm
в zip сжатая inversion(color) inversion.js
function getHexRGBColor(a) {
    a = a.replace(/\s/g, "");
    var c = a.match(/^rgb\((\d{1,3}[%]?),(\d{1,3}[%]?),(\d{1,3}[%]?)\)$/i);
    if (c) {
        a = "";
        for (var b = 1; b <= 3; b++) a += Math.round((c[b][c[b].length - 1] == "%" ? 2.55 : 1) * parseInt(c[b], 10)).toString(16).replace(/^(.)$/, "0$1")
    } else a = a.replace(/^#?([\da-f])([\da-f])([\da-f])$/i, "$1$1$2$2$3$3");
    return a
};

function nemedColor2Hex(a) {
    return {
        aliceblue: "#f0f8ff",
        antiquewhite: "#faebd7",
        aqua: "#00ffff",
        aquamarine: "#7fffd4",
        azure: "#f0ffff",
        beige: "#f5f5dc",
        bisque: "#ffe4c4",
        black: "#000000",
        blanchedalmond: "#ffebcd",
        blue: "#0000ff",
        blueviolet: "#8a2be2",
        brown: "#a52a2a",
        burlywood: "#deb887",
        cadetblue: "#5f9ea0",
        chartreuse: "#7fff00",
        chocolate: "#d2691e",
        coral: "#ff7f50",
        cornflowerblue: "#6495ed",
        cornsilk: "#fff8dc",
        crimson: "#dc143c",
        cyan: "#00ffff",
        darkblue: "#00008b",
        darkcyan: "#008b8b",
        darkgoldenrod: "#b8860b",
        darkgray: "#a9a9a9",
        darkgreen: "#006400",
        darkkhaki: "#bdb76b",
        darkmagenta: "#8b008b",
        darkolivegreen: "#556b2f",
        darkorange: "#ff8c00",
        darkorchid: "#9932cc",
        darkred: "#8b0000",
        darksalmon: "#e9967a",
        darkseagreen: "#8fbc8f",
        darkslateblue: "#483d8b",
        darkslategray: "#2f4f4f",
        darkturquoise: "#00ced1",
        darkviolet: "#9400d3",
        deeppink: "#ff1493",
        deepskyblue: "#00bfff",
        dimgray: "#696969",
        dodgerblue: "#1e90ff",
        feldspar: "#d19275",
        firebrick: "#b22222",
        floralwhite: "#fffaf0",
        forestgreen: "#228b22",
        fuchsia: "#ff00ff",
        gainsboro: "#dcdcdc",
        ghostwhite: "#f8f8ff",
        gold: "#ffd700",
        goldenrod: "#daa520",
        gray: "#808080",
        green: "#008000",
        greenyellow: "#adff2f",
        honeydew: "#f0fff0",
        hotpink: "#ff69b4",
        indianred: "#cd5c5c",
        indigo: "#4b0082",
        ivory: "#fffff0",
        khaki: "#f0e68c",
        lavender: "#e6e6fa",
        lavenderblush: "#fff0f5",
        lawngreen: "#7cfc00",
        lemonchiffon: "#fffacd",
        lightblue: "#add8e6",
        lightcoral: "#f08080",
        lightcyan: "#e0ffff",
        lightgoldenrodyellow: "#fafad2",
        lightgrey: "#d3d3d3",
        lightgreen: "#90ee90",
        lightpink: "#ffb6c1",
        lightsalmon: "#ffa07a",
        lightseagreen: "#20b2aa",
        lightskyblue: "#87cefa",
        lightslateblue: "#8470ff",
        lightslategray: "#778899",
        lightsteelblue: "#b0c4de",
        lightyellow: "#ffffe0",
        lime: "#00ff00",
        limegreen: "#32cd32",
        linen: "#faf0e6",
        magenta: "#ff00ff",
        maroon: "#800000",
        mediumaquamarine: "#66cdaa",
        mediumblue: "#0000cd",
        mediumorchid: "#ba55d3",
        mediumpurple: "#9370d8",
        mediumseagreen: "#3cb371",
        mediumslateblue: "#7b68ee",
        mediumspringgreen: "#00fa9a",
        mediumturquoise: "#48d1cc",
        mediumvioletred: "#c71585",
        midnightblue: "#191970",
        mintcream: "#f5fffa",
        mistyrose: "#ffe4e1",
        moccasin: "#ffe4b5",
        navajowhite: "#ffdead",
        navy: "#000080",
        oldlace: "#fdf5e6",
        olive: "#808000",
        olivedrab: "#6b8e23",
        orange: "#ffa500",
        orangered: "#ff4500",
        orchid: "#da70d6",
        palegoldenrod: "#eee8aa",
        palegreen: "#98fb98",
        paleturquoise: "#afeeee",
        palevioletred: "#d87093",
        papayawhip: "#ffefd5",
        peachpuff: "#ffdab9",
        peru: "#cd853f",
        pink: "#ffc0cb",
        plum: "#dda0dd",
        powderblue: "#b0e0e6",
        purple: "#800080",
        red: "#ff0000",
        rosybrown: "#bc8f8f",
        royalblue: "#4169e1",
        saddlebrown: "#8b4513",
        salmon: "#fa8072",
        sandybrown: "#f4a460",
        seagreen: "#2e8b57",
        seashell: "#fff5ee",
        sienna: "#a0522d",
        silver: "#c0c0c0",
        skyblue: "#87ceeb",
        slateblue: "#6a5acd",
        slategray: "#708090",
        snow: "#fffafa",
        springgreen: "#00ff7f",
        steelblue: "#4682b4",
        tan: "#d2b48c",
        teal: "#008080",
        thistle: "#d8bfd8",
        tomato: "#ff6347",
        turquoise: "#40e0d0",
        violet: "#ee82ee",
        violetred: "#d02090",
        wheat: "#f5deb3",
        white: "#ffffff",
        whitesmoke: "#f5f5f5",
        yellow: "#ffff00",
        yellowgreen: "#9acd32"
    }[a.toLowerCase()] || null
};

function inversion(a) {
    a = nemedColor2Hex(a) || a;
    a = getHexRGBColor(a);
    a = a.match(/^#?([\dabcdef]{2})([\dabcdef]{2})([\dabcdef]{2})$/i);
    if (!a) return false;
    for (var b = 1, c = "#"; b <= 3; b++) c += (255 - parseInt(a[b], 16)).toString(16).toUpperCase().replace(/^(.)$/, "0$1");
    return c
};
alert('#FF0000\n' + inversion('red') + '\n' + inversion('#FF0000')+ '\n' + inversion('#F00')+ '\n' + inversion('F00'));

Последний раз редактировалось рони, 26.04.2016 в 12:46.
Ответить с цитированием
  #5 (permalink)  
Старый 18.06.2010, 07:20
Кандидат Javascript-наук
Отправить личное сообщение для Бобр Посмотреть профиль Найти все сообщения от Бобр
 
Регистрация: 03.11.2008
Сообщений: 116

рони, спасибо. Жаль только, что длинно так, 3.5 килобайта кода добавляется.
Ответить с цитированием
  #6 (permalink)  
Старый 18.06.2010, 08:59
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от Octane
Еще как-то можно через побитовое отрицание ~ сделать.
Скорее xor.
var r = "fefefe", color = (parseInt(r, 16) ^ 0xFFFFFF | 0x1000000).toString(16).substring(1);


alert('#' + color);

Последний раз редактировалось B@rmaley.e><e, 18.06.2010 в 09:06.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическре изменение цвета ячейки по нажатию на ссылку Bagira Элементы интерфейса 7 08.04.2011 16:54
Поиск нужного скрипта (выбор цвета) Djumpen Общие вопросы Javascript 1 02.04.2010 08:23
Фон сайта.Бесконечная анимация цвета mdbm Элементы интерфейса 10 22.03.2010 17:09
изменение цвета фона alina Общие вопросы Javascript 1 27.12.2009 17:23
Изменение цвета ячейки (динамическая таблица) не по событию ImSWORDMASTER Элементы интерфейса 3 12.03.2009 21:21