当前位置:首页 > JavaScript

js实现hsv

2026-04-05 20:47:16JavaScript

HSV颜色模型简介

HSV(Hue-Saturation-Value)是一种基于颜色直观特性的颜色空间模型,常用于颜色选择和图像处理。H代表色相(0-360°),S代表饱和度(0-100%),V代表明度(0-100%)。

RGB转HSV算法

以下JavaScript函数可将RGB值(范围0-255)转换为HSV值(范围H:0-360, S/V:0-100):

function rgbToHsv(r, g, b) {
  r /= 255, g /= 255, b /= 255;
  const max = Math.max(r, g, b), min = Math.min(r, g, b);
  let h, s, v = max;
  const d = max - min;
  s = max === 0 ? 0 : d / max;

  if (max === min) {
    h = 0;
  } else {
    switch (max) {
      case r: h = (g - b) / d + (g < b ? 6 : 0); break;
      case g: h = (b - r) / d + 2; break;
      case b: h = (r - g) / d + 4; break;
    }
    h *= 60;
  }
  return [h, s * 100, v * 100];
}

HSV转RGB算法

将HSV值转换回RGB的JavaScript实现:

function hsvToRgb(h, s, v) {
  s /= 100, v /= 100;
  const c = v * s;
  const x = c * (1 - Math.abs((h / 60) % 2 - 1));
  const m = v - c;
  let r, g, b;

  if (h >= 0 && h < 60) [r, g, b] = [c, x, 0];
  else if (h < 120) [r, g, b] = [x, c, 0];
  else if (h < 180) [r, g, b] = [0, c, x];
  else if (h < 240) [r, g, b] = [0, x, c];
  else if (h < 300) [r, g, b] = [x, 0, c];
  else [r, g, b] = [c, 0, x];

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

颜色选择器实现示例

基于HSV模型的简易颜色选择器实现:

// 创建HSV色轮
function createColorWheel(canvas, size) {
  const ctx = canvas.getContext('2d');
  canvas.width = canvas.height = size;
  const center = size / 2;
  const radius = center - 10;

  for (let angle = 0; angle < 360; angle++) {
    for (let r = 0; r < radius; r++) {
      const x = center + r * Math.cos(angle * Math.PI / 180);
      const y = center + r * Math.sin(angle * Math.PI / 180);
      const sat = r / radius * 100;
      const [red, green, blue] = hsvToRgb(angle, sat, 100);
      ctx.fillStyle = `rgb(${red},${green},${blue})`;
      ctx.fillRect(x, y, 1, 1);
    }
  }
}

应用场景

HSV模型特别适合需要直观颜色调整的场景:

js实现hsv

  • 图形编辑软件中的颜色拾取器
  • 数据可视化的主题颜色生成
  • 用户界面设计中的动态配色方案

以上实现可直接用于网页开发中的颜色处理需求,通过调整HSV参数可精确控制颜色表现。

标签: jshsv
分享给朋友:

相关文章

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…