Javascript 计算较深的颜色

标签 javascript jquery colors calculator

如何将此计算更改为更暗而不是更亮的颜色?

function increase_brightness(hex, percent){
    // strip the leading # if it's there
    hex = hex.replace(/^\s*#|\s*$/g, '');

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

    var r = parseInt(hex.substr(0, 2), 16),
        g = parseInt(hex.substr(2, 2), 16),
        b = parseInt(hex.substr(4, 2), 16);

    return '#' +
       ((0|(1<<8) + r + (256 - r) * percent / 100).toString(16)).substr(1) +
       ((0|(1<<8) + g + (256 - g) * percent / 100).toString(16)).substr(1) +
       ((0|(1<<8) + b + (256 - b) * percent / 100).toString(16)).substr(1);
}

来源 = JavaScript Calculate brighter colour

演示 http://jsbin.com/utavax/3/edit

最佳答案

你可以改变

return '#' +
   ((0|(1<<8) + r + (256 - r) * percent / 100).toString(16)).substr(1) +
   ((0|(1<<8) + g + (256 - g) * percent / 100).toString(16)).substr(1) +
   ((0|(1<<8) + b + (256 - b) * percent / 100).toString(16)).substr(1);

return '#' +
   ((0|(1<<8) + r * (1 - percent / 100)).toString(16)).substr(1) +
   ((0|(1<<8) + g * (1 - percent / 100)).toString(16)).substr(1) +
   ((0|(1<<8) + b * (1 - percent / 100).toString(16)).substr(1);

将解决您的问题。 demo .

但是较深的颜色并不是一个好的定义。较暗可以解释为亮度较低或饱和度较低。因此,更好的方法是将 RGB 颜色空间转换为 HSB 颜色空间,并调整 S/B channel ,然后将它们转换回来。


关于为什么对原始代码负值不可行的一点解释。

给-100作为百分比,还有一些 channel ,比如r,小于128。然后

r + (256 - r) * percent / 100

小于0,加1 << 8后= 256

((0|(1<<8) + r + (256 - r) * percent / 100)

小于 256。

通过调用 toString(16) 取一个小于 256 的数字将生成最多两个十六进制数字, 所以 .substr(1)将仅包含 0 或 1 个数字。将所有这些错误的数字组合在一起将不会生成十六进制表示形式的正确颜色。

关于Javascript 计算较深的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13375039/

相关文章:

vb.net - 为什么饱和度和色调的最大值分别为 240 和 239?

Javascript 注释有安全风险吗?

javascript - 带有选择器的 jQuery .remove() 不起作用

javascript - 如何使用 Ajax 调用在 application.js 中正确执行 jquery 请求

javascript - 如何通过创建div来隐藏JSON数据

android - 如何在代码中设置TextView的文字颜色?

对象中的 Javascript 键盘事件

javascript - 使用css3动画将鼠标悬停时从右向左移动按钮

javascript - Select2 从多个中获取删除的值

python - 重置 Python/Matplotlib 中绘图的默认字体/颜色