Как для введенного цвета рассчитать цвет фона? - PullRequest
4 голосов
/ 10 марта 2020

В моем приложении @ vue / cli 4.1.1 пользователь вводит цвет, и мне нужно вывести значение цвета с введенным цветом, и мне интересно, как я могу рассчитать и установить цвет фона, чтобы убедиться, что введенное значение цвета хорошо видно. Я имею в виду, если пользователь ввел белый цвет (или рядом) фон должен быть темным?

Спасибо

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Вы можете задать инвертированный цвет - 255-color для каждого из rgb

function bg(r, g, b) {return [255-r, 255-g, 255-b]}

. Если вы получите его в шестнадцатеричном формате, вы можете конвертировать его в rgb, а затем получить инвертирование. вот так:

function invert(hex){
  hex = parseInt(hex.substring(1), 16);
  var r = hex >> 16;
  hex -= r << 16;
  var g = hex >> 8;
  hex -= g << 8;
  var b = hex;
  return `rgb(${255-r},${255-g},${255-b})`;
}
var color1 = "#eeff00";
var color2 = "#22faef";
var color3 = "#f1f1f1";
document.querySelector('#a').style = `color:${color1};background-color:${invert(color1)}`;
document.querySelector('#b').style = `color:${color2};background-color:${invert(color2)}`;
document.querySelector('#c').style = `color:${color3};background-color:${invert(color3)}`;
div {
padding: 10px;
}
<div id="a">Hello world!</div>
<div id="b">Hello world!</div>
<div id="c">Hello world!</div>
1 голос
/ 10 марта 2020

Вы можете определить введенный цвет как светлый или темный на основе его яркости.

Здесь вы можете найти формулу , на которую она рассчитана.

Итак, вы можете, например, определить функцию isLight следующим образом

function isLight(color) {
  // Converting hex color to rgb
  const [red, green, blue] = hexToRgb(color);

  // Determine luminance
  const luminance = (0.299 * red + 0.587 * green + 0.114 * blue)/255;

  // Returning true if color is light
  return luminance > 0.5;
}

// function for converting hex colors to rgb array format
function hexToRgb(hex) {
  const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
  return result ? [
    parseInt(result[1], 16),
    parseInt(result[2], 16),
    parseInt(result[3], 16)
  ] : null;
}

Используя эту функцию, вы можете определить, является ли пользовательский цвет светлым или темным, и, таким образом, установить соответствующий фон

...