在 javascript 中更改 RGB 颜色的色调

2024-03-19

如同this https://stackoverflow.com/questions/6443990/javascript-calculate-brighter-colour(如何增加亮度)我想更改 RGB(十六进制)颜色的色调。

Say changeHue("#FF0000", 40)回报"#FFAA00"


这是我找到的解决方案。我希望它有用并且可能在将来有所帮助。非常欢迎任何改进或进一步的解决方案。

改变色调

// Changes the RGB/HEX temporarily to a HSL-Value, modifies that value 
// and changes it back to RGB/HEX.

function changeHue(rgb, degree) {
    var hsl = rgbToHSL(rgb);
    hsl.h += degree;
    if (hsl.h > 360) {
        hsl.h -= 360;
    }
    else if (hsl.h < 0) {
        hsl.h += 360;
    }
    return hslToRGB(hsl);
}

// exepcts a string and returns an object
function rgbToHSL(rgb) {
    // strip the leading # if it's there
    rgb = rgb.replace(/^\s*#|\s*$/g, '');

    // convert 3 char codes --> 6, e.g. `E0F` --> `EE00FF`
    if(rgb.length == 3){
        rgb = rgb.replace(/(.)/g, '$1$1');
    }

    var r = parseInt(rgb.substr(0, 2), 16) / 255,
        g = parseInt(rgb.substr(2, 2), 16) / 255,
        b = parseInt(rgb.substr(4, 2), 16) / 255,
        cMax = Math.max(r, g, b),
        cMin = Math.min(r, g, b),
        delta = cMax - cMin,
        l = (cMax + cMin) / 2,
        h = 0,
        s = 0;

    if (delta == 0) {
        h = 0;
    }
    else if (cMax == r) {
        h = 60 * (((g - b) / delta) % 6);
    }
    else if (cMax == g) {
        h = 60 * (((b - r) / delta) + 2);
    }
    else {
        h = 60 * (((r - g) / delta) + 4);
    }

    if (delta == 0) {
        s = 0;
    }
    else {
        s = (delta/(1-Math.abs(2*l - 1)))
    }

    return {
        h: h,
        s: s,
        l: l
    }
}

// expects an object and returns a string
function hslToRGB(hsl) {
    var h = hsl.h,
        s = hsl.s,
        l = hsl.l,
        c = (1 - Math.abs(2*l - 1)) * s,
        x = c * ( 1 - Math.abs((h / 60 ) % 2 - 1 )),
        m = l - c/ 2,
        r, g, b;

    if (h < 60) {
        r = c;
        g = x;
        b = 0;
    }
    else if (h < 120) {
        r = x;
        g = c;
        b = 0;
    }
    else if (h < 180) {
        r = 0;
        g = c;
        b = x;
    }
    else if (h < 240) {
        r = 0;
        g = x;
        b = c;
    }
    else if (h < 300) {
        r = x;
        g = 0;
        b = c;
    }
    else {
        r = c;
        g = 0;
        b = x;
    }

    r = normalize_rgb_value(r, m);
    g = normalize_rgb_value(g, m);
    b = normalize_rgb_value(b, m);

    return rgbToHex(r,g,b);
}

function normalize_rgb_value(color, m) {
    color = Math.floor((color + m) * 255);
    if (color < 0) {
        color = 0;
    }
    return color;
}

function rgbToHex(r, g, b) {
    return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}

Usage

changeHue("#FF0000", 40) --> returns #ffaa00  
changeHue("#D61E1E", 180) --> returns #1ed6d6 
changeHue("#2244BB", -80) --> returns #21bb66 

参考

  • RGB 转 HSL http://www.rapidtables.com/convert/color/rgb-to-hsl.htm
  • HSL 转 RGB http://www.rapidtables.com/convert/color/hsl-to-rgb.htm
  • 初始十六进制到 RGB 的转换 https://stackoverflow.com/questions/6443990/javascript-calculate-brighter-colour/6444043#comment25294560_6444043
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 javascript 中更改 RGB 颜色的色调 的相关文章

  • Exceljs:迭代每行和每列的每个单元格

    我想在所有单元格中添加粗边框 这是一个有角度的项目 我正在使用打字稿 我可以为 1 个单元格做到这一点 worksheet getCell A1 border top style thick left style thick bottom
  • Python求矩阵动态规划中最大的平方

    我有一个矩阵如下 Python matrix o o o oo o o o ooo o o oo o o oo 其中 o 是一个障碍 我需要找到这个矩阵中最大的正方形 并替换相应的 带有 x 如下所示 xxxo o o xxxoo xxxo
  • 整个页面都是玻璃板

    有没有一种简单的方法可以在整个 HTML 页面上拥有一个 玻璃窗格 而不管缩放 幻灯片事件 平台 浏览器 移动 桌面 我所说的 简单 是指纯 CSS 支持 而不是插件 后备 插件建议也可能有用 Thanks 如果您只是指所有内容之上的一层
  • 在小于 O(N) 的时间内找出点是否位于 N 个(可能重叠)矩形之一内

    我有一个图像 我想在鼠标移动到某些矩形区域时显示工具提示 矩形区域最多可达 1000 个 但是 仅检查每个矩形中是否有点 时间复杂度为 O N 导致移动鼠标时界面无响应 有没有办法在小于 O N 的时间内完成它 我可以预先对矩形进行排序 我
  • 如何在React-Native中选择ListView的一项?

    我是 React Native 的新手 我想使用 ListView 选择一项 当我第一次按下 item 时 ListView renderRow 被调用 但终究不起作用 我该如何修复这个错误 我的问题出在哪里 我写了一个演示here htt
  • Node.js Google-云存储上传目的地规范

    我有一个 Node js 服务器并且正在使用谷歌云上传一些图像文件的包Firebase 存储 上传本身工作正常 但 google cloud API 似乎只能将文件上传到 Firebase Storage 根文件夹 有没有办法指定远程位置来
  • Javascript 自时间戳以来经过的时间

    我试图通过将其存储在变量中来 缓存 一些信息 如果 2 分钟过去了 我想获取 实时 值 调用 url 如果 2 分钟还没有过去 我想从变量中获取数据 我基本上想要的是 if time passed is less than 2 minute
  • 为什么我的箭头函数有原型属性?

    正如文档中提到的https developer mozilla org en docs Web JavaScript Reference Functions Arrow functions https developer mozilla o
  • 如何使用 console.log 省略文件/行号

    如今 您可以在 Chrome 的控制台中编写非常好的东西 查看this https developer chrome com devtools docs tips and tricks关联 我也做了一个截图 正如您在屏幕截图中看到的那样 文
  • 如何更改点击事件上的引导插入符指向方向

    我正在使用 2 3 2 引导程序 因为当我单击菜单按钮时 我可以更改插入符号图标的位置 我需要当我单击图标插入符号向上时 当您单击另一个项目时 插入符号返回到初始状态 这怎么可能 导航代码 div div class container d
  • toJSON() 和 JSON.Stringify() 之间的区别

    如果您需要读取或克隆模型的所有数据属性 请使用其 toJSON 方法 此方法返回属性的副本作为 对象 尽管有其名称 但不是 JSON 字符串 当 JSON stringify 为 使用 toJSON 方法传递一个对象 它将返回的字符串化 t
  • 如果图像包含特定颜色则

    是否有一种简单的方法来检查图像是否包含特定的 RGB 颜色 例如 Dim img As Image Image FromFile C image png If img contains color red toRGB then 我认为检查这
  • 标记内的值发生变化时调用函数

    JavaScript 有没有什么方法可以在段落标记的值更改时调用函数 概述 HTML p 00 00 p
  • 它们是“相同的”吗?代码大战

    这是完整的问题描述 给定两个数组 a 和 b 编写一个函数 comp a b Clojure 中的 compSame a b 来检查这两个数组是否具有 相同 元素以及相同的重数 这里 相同 意味着 b 中的元素是 a 平方中的元素 无论顺序
  • 如何更改 Vuetify 日历日期格式

    我正在尝试在以下 Vuetify 日历上启用输入事件 https github com vuetifyjs vuetify blob master packages docs src examples calendars complex e
  • 根据数据更改图例颜色高图表

    我可以根据数据动态设置列的颜色 但无法弄清楚如何更改图例中的颜色 请注意 jsfiddle 最新的条形图是绿色的 但图例是蓝色的 有没有办法改变列颜色也会改变图例颜色 这是我用于列颜色的代码 jsfiddle http jsfiddle n
  • 谷歌浏览器如何启动桌面应用程序?

    我真的不知道术语 所以我将从一个例子开始 如果我点击磁力链接 Google Chrome 会询问我是否要启动 torrent 客户端 我单击 确定 chrome 启动该应用程序 该应用程序根据链接执行一些操作 现在有办法查看应用程序如何从
  • .NET - 将颜色名称字符串转换为 System.Drawing.Color

    将 red green yellow aliceblue 等字符串转换为实际的 System Drawing Color 值的最佳方法是什么 我正在查看反思 发现有些事情似乎不对劲 您可以使用 Color FromName
  • onClick 事件适用于触摸屏设备上的触摸吗?

    我用过onclick我的网站上的活动 但是 当我在谷歌浏览器的开发人员模式移动视图中打开它时 触摸使用鼠标单击的元素没有任何反应 所以我的问题是 我还必须添加吗ontouch事件连同onclick事件或 onClick 事件适用于所有触摸屏
  • javascript:获取带有单位的CSS prop值[重复]

    这个问题在这里已经有答案了 我的代码是这样的 image 1 position absolute top 3vw 我的尝试 http jsfiddle net z8k6t3fb 1 http jsfiddle net z8k6t3fb 1

随机推荐

  • 如何在spark中配置hbase?

    Spark连接hbase的步骤是什么 我有两者的主地址 我是否只需将 hbase 地址添加到 Spark 类路径中 这篇关于 Spark 与 HBase 连接的文章应该会有所帮助 http www vidyasource com blog
  • 没有唯一标识符的 Bootstrap 崩溃

    我正在尝试以不需要唯一标识符的方式使用引导折叠插件 通常 页面上通常有一个或几个可折叠元素 但我的元素是动态生成的 传递索引键是多余的 现在发生的情况是 如果我将折叠切换为element2 它会崩溃element1 显然是因为他们有相同的I
  • 优先连接Wifi [无互联网]?

    我有个问题 我开发了一个android应用程序 它也应该连接到无线网络 没有互联网 只是为了控制机器人 网页界面 10 10 0 1 我的问题 如果我连接到机器人 wifi Android 会阻止连接并连接到我的默认家庭 WLAN 我可以更
  • 如何在应用程序中禁用 Aero Snap?

    是否可以在 WPF 应用程序中禁用 Windows 7 的自动窗口停靠功能 我最近需要对一个自定义的 可调整大小的ResizeMode CanResizeWithGrip没有窗口装饰的 WPF 窗口 没有标题栏和按钮 我用了DragMove
  • 如何在 iOS 7 应用程序上启用后台更新

    如何让我的应用程序使用 iOS 7 后台更新功能 我注意到一些应用程序已经做到了这一点 但似乎并不是所有应用程序都是自动的 根据iOS 7 的新功能 https developer apple com library ios release
  • 是否可以在 Chrome 检查器中过滤选项请求?

    我正在构建一个使用 CORS 与其服务器进行通信的 Web 应用程序 这意味着每个请求之前都有一个带有 OPTIONS 方法的请求 是否可以在检查器中过滤掉它们 它在网络选项卡上造成了很多不必要的混乱 是的 您可以使用 method OPT
  • 属性错误:“用户”对象没有属性“is_admin”

    我通过扩展 AbstractBaseUser 自定义了用户模型 用户名仅接受电子邮件 ID 这是模型 class User AbstractBaseUser PermissionsMixin email models EmailField
  • 修改包含数据的列类型,而不删除数据

    我有一个专栏 我认为该专栏的声明是错误的 它包含数据 我不希望丢失数据 我希望将定义从 varchar max 更改为 varchar 整数 我的印象是我不能只改变列类型 最好的方法是创建临时列 column2 将数据从有问题类型的列传输到
  • Subversion 更新问题

    当我尝试更新我的存储库时 出现以下错误 有人能解释一下这是什么意思吗 命令 更新错误 网址错误 http mysvn foo 错误 现有目录错误 C SVN MyProj NinjectModules Models 不匹配错误 预期 URL
  • 保留 SQL 中的文本格式

    我有一个文本区域 可将其内容插入到 SQL 表中 有没有办法保留文本的格式 然后在 HTML 中使用它 我假设您正在谈论保留换行符 Either 输出 标签内的文本 or 在插入数据库之前将换行符转换为 标记 例如 PHP 中的 nl2br
  • R 噩梦:Yosemite、R、RStudio 和 Homebrew

    我使用配备 OS X Yosemite 10 10 2 的 MacBook Pro 13 Retina 2013 年末 我不希望我最大的敌人遇到这种情况 也许吧 噩梦按时间顺序排列 从官方网站下载 R 和 RStudio 运行这两个应用程序
  • 将数组数据分解为spark中的行[重复]

    这个问题在这里已经有答案了 我有一个数据集 如下所示 FieldA FieldB ArrayField 1 A 1 2 3 2 B 3 5 我想爆炸数据数组字段所以输出将如下所示 FieldA FieldB ExplodedField 1
  • 提高 Python Tesseract OCR 的准确性

    我在用pytesseract https pypi org project pytesseract 随着openCV https pypi org project opencv python 在 Python 中的简单 django 应用程
  • 无法使用 Apache FOP 生成 PDF

    我正在尝试使用 Apache FOP 使用 XML 数据和 XSL 样式表创建 PDF 但我不断收到以下错误 org apache fop apps FOPException org apache fop fo ValidationExce
  • 显示寄存器内容

    您好 我需要帮助显示寄存器的内容 我的代码如下 我已经能够显示数据寄存器的值 但我想显示标志状态 例如 1 或 0 如果还显示其他寄存器 如 esi ebp 的内容 将会很有帮助 我的代码没有打印标志的状态 我缺少什么 section te
  • 清除回发时的查询字符串

    简单的问题 但我不知道该怎么做 我有一个带有 GridView 的页面 最初使用查询字符串填充 获取查询字符串值后 我不需要查询字符串 因为我使用 DropDownList 的值来填充 GridView 我怎样才能摆脱它 回发并不能清除它
  • 以编程方式将列表作为 Web 部件插入 WSS 3.0 中的 Web 部件页面中

    我尝试在网上搜索以编程方式将列表作为 Web 部件插入到 Web 部件页面中 但不够幸运 我有什么想法或想法以编程方式将列表作为 Web 部件插入到 Web 部件页面中 非常感谢 首先添加这些 using 语句 using Microsof
  • 使用插件 dsl 语法应用 hibernate-gradle-plugin?

    我想用org hibernate hibernate gradle plugin在我的项目中使用插件 dsl 风格 这是我的build gradle kts插件部分 plugins kotlin jvm version 1 3 31 id
  • 如何解析 .msstyles 文件?

    我需要从 msstyles 文件 Windows XP 视觉样式文件 中提取一些位图 但我不知道从哪里开始 我似乎找不到任何有关如何执行此操作的文档 并且文件格式似乎是二进制的并且不容易解析 我已经能够使用以下方法自行提取位图 IntPtr
  • 在 javascript 中更改 RGB 颜色的色调

    如同this https stackoverflow com questions 6443990 javascript calculate brighter colour 如何增加亮度 我想更改 RGB 十六进制 颜色的色调 Say cha