Методы JavaScript для получения противоположного шестнадцатеричного цвета

Чтобы получить противоположный (дополнительный) цвет в шестнадцатеричном формате с помощью JavaScript, вы можете использовать несколько методов. Вот некоторые из них:

Метод 1: инвертирование значений RGB

  • Преобразуйте шестнадцатеричный цвет в его представление RGB.
  • Вычтите каждый компонент RGB из 255.
  • Преобразуйте инвертированные значения RGB обратно в шестнадцатеричные.

Вот пример реализации:

function getOppositeHexColor(hexColor) {
  // Remove the # symbol if present
  hexColor = hexColor.replace("#", "");
  // Convert hex to RGB
  var r = parseInt(hexColor.substr(0, 2), 16);
  var g = parseInt(hexColor.substr(2, 2), 16);
  var b = parseInt(hexColor.substr(4, 2), 16);
  // Invert the RGB values
  r = 255 - r;
  g = 255 - g;
  b = 255 - b;
  // Convert RGB to hex
  var invertedHexColor = "#" + ((r << 16) | (g << 8) | b).toString(16).padStart(6, "0");
  return invertedHexColor;
}
// Usage example
var oppositeColor = getOppositeHexColor("#FF0000");
console.log(oppositeColor); // Outputs "#00FFFF"

Метод 2. Использование цветовой модели HSL

  • Преобразуйте шестнадцатеричный цвет в его представление RGB.
  • Преобразуйте значения RGB в цветовую модель HSL.
  • Добавьте 180 градусов к значению оттенка.
  • Преобразуйте измененные значения HSL обратно в RGB.
  • Преобразуйте значения RGB обратно в шестнадцатеричные.

Вот пример реализации с использованием библиотеки tinycolor:

// Install the tinycolor library using npm: npm install tinycolor2
const tinycolor = require("tinycolor2");
function getOppositeHexColor(hexColor) {
  var color = tinycolor(hexColor);
  var hsl = color.toHsl();
  // Add 180 degrees to the hue value
  hsl.h += 180;
  hsl.h = hsl.h > 360 ? hsl.h - 360 : hsl.h;
  // Convert modified HSL back to RGB
  var oppositeColor = tinycolor(hsl).toRgb();
  // Convert RGB to hex
  var invertedHexColor = tinycolor(oppositeColor).toHex();
  return invertedHexColor;
}
// Usage example
var oppositeColor = getOppositeHexColor("#FF0000");
console.log(oppositeColor); // Outputs "#00FFFF"