当前位置:首页 > JavaScript

js实现hsv

2026-03-14 02:39:52JavaScript

HSV 颜色模型简介

HSV(Hue, Saturation, Value)是一种颜色空间模型,通过色相(H)、饱和度(S)、明度(V)描述颜色。与RGB相比,HSV更接近人类对颜色的直观感知。

js实现hsv

RGB 转 HSV 的 JavaScript 实现

以下代码将RGB值(范围0-255)转换为HSV值(H范围0-360,S和V范围0-1):

js实现hsv

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: h, s: s, v: v };
}

HSV 转 RGB 的 JavaScript 实现

以下代码将HSV值转换回RGB值(范围0-255):

function hsvToRgb(h, s, v) {
    let r, g, b;
    const i = Math.floor(h / 60);
    const f = h / 60 - i;
    const p = v * (1 - s);
    const q = v * (1 - f * s);
    const t = v * (1 - (1 - f) * s);

    switch (i % 6) {
        case 0: r = v, g = t, b = p; break;
        case 1: r = q, g = v, b = p; break;
        case 2: r = p, g = v, b = t; break;
        case 3: r = p, g = q, b = v; break;
        case 4: r = t, g = p, b = v; break;
        case 5: r = v, g = p, b = q; break;
    }

    return {
        r: Math.round(r * 255),
        g: Math.round(g * 255),
        b: Math.round(b * 255)
    };
}

使用示例

// RGB转HSV示例
const hsv = rgbToHsv(255, 100, 50);
console.log(hsv); // 输出类似 { h: 15, s: 0.8, v: 1 }

// HSV转RGB示例
const rgb = hsvToRgb(15, 0.8, 1);
console.log(rgb); // 输出类似 { r: 255, g: 100, b: 50 }

注意事项

  • HSV的H(色相)范围是0-360度,S(饱和度)和V(明度)范围是0-1。
  • RGB值输入范围应为0-255,输出也是0-255。
  • 转换时注意边界条件,如饱和度为0时色相无意义。

标签: jshsv
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现原理

js实现原理

JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…