Используйте скрипт для преобразования списка цветов из HSL в RGB в виде скрипта Google Apps. - PullRequest
0 голосов
/ 05 мая 2020

Доброе утро. Я нашел следующий скрипт, который преобразует цвета в формате HSL (оттенок, насыщенность, уровень) в формат RGB (красный, зеленый, синий) в этом потоке: преобразование цвета HSL в RGB

/**
 * Converts an HSL color value to RGB. Conversion formula
 * adapted from http://en.wikipedia.org/wiki/HSL_color_space.
 * Assumes h, s, and l are contained in the set [0, 1] and
 * returns r, g, and b in the set [0, 255].
 *
 * @param   {number}  h       The hue
 * @param   {number}  s       The saturation
 * @param   {number}  l       The lightness
 * @return  {Array}           The RGB representation
 */
function hslToRgb(h, s, l){
    var r, g, b;

    if(s == 0){
        r = g = b = l; // achromatic
    }else{
        var hue2rgb = function hue2rgb(p, q, t){
            if(t < 0) t += 1;
            if(t > 1) t -= 1;
            if(t < 1/6) return p + (q - p) * 6 * t;
            if(t < 1/2) return q;
            if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
            return p;
        }

        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
        var p = 2 * l - q;
        r = hue2rgb(p, q, h + 1/3);
        g = hue2rgb(p, q, h);
        b = hue2rgb(p, q, h - 1/3);
    }

    return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
}

Я хотел бы знать, можно ли использовать его, учитывая необходимые адаптации, в среде Google Таблиц как скрипт приложений. Идея состоит в том, чтобы вставить значения HSL в формате, разделенном запятыми (H, S, L), в столбец A: A, запустить скрипт и получить значения RGB также в формате, разделенном запятыми (R, G, B), в столбце B: B . Большое вам спасибо.

1 Ответ

2 голосов
/ 05 мая 2020

Я считаю вашей целью следующее.

  • В столбце «A» указаны значения HSL. Каждая ячейка имеет значение, разделенное запятыми, например 0.5,0.5,0.5.
  • Вы хотите использовать свою настраиваемую функцию, например, =hslToRgb(A:A), вставить в ячейку «B1», и вы хотите поместить значения результатов в столбец «B». ". Каждая ячейка имеет значение, разделенное запятыми, например 64,191,191.

Для этого, как насчет этого ответа?

Точки модификации:

  • Я думаю, что logi c вашего скрипта верен.
  • Когда используется =hslToRgb(A:A), значения из A:A представляют собой двумерный массив. В вашем текущем скрипте каждое значение используется в качестве каждого аргумента.

Используя это, я подготовил функцию-оболочку для вашего скрипта следующим образом.

Измененный скрипт:

Скопируйте и вставьте следующий сценарий. В вашем скрипте изменяется только имя функции для использования =hslToRgb(A:A). Пожалуйста, будьте осторожны.

// I prepared this function.
function hslToRgb(values) {
  return values.map(([a]) => (
    [a != "" ? hslToRgb_calc_(...a.split(",").map(e => Number(e.trim()))).join(",") : null]
  ));
}

function hslToRgb_calc_(h, s, l){  // Modified
    var r, g, b;

    if(s == 0){
        r = g = b = l; // achromatic
    }else{
        var hue2rgb = function hue2rgb(p, q, t){
            if(t < 0) t += 1;
            if(t > 1) t -= 1;
            if(t < 1/6) return p + (q - p) * 6 * t;
            if(t < 1/2) return q;
            if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
            return p;
        }

        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
        var p = 2 * l - q;
        r = hue2rgb(p, q, h + 1/3);
        g = hue2rgb(p, q, h);
        b = hue2rgb(p, q, h - 1/3);
    }

    return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
}
  • Чтобы использовать этот скрипт, введите =hslToRgb(A:A) в ячейку «B1». В этом случае предполагается, что ячейки «A: A» имеют значения HSL, разделенные запятыми.
    • Когда значение "0.5,0.5,0.5" значения HSL в виде строки, "64,191,191" значения RGB возвращается как строка.

Примечание:

  • Используйте этот скрипт с V8.

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...