这是我正在使用的功能,用于以编程方式使十六进制颜色变亮或变暗特定数量。只需传入一个"3F6D2A"
颜色字符串(col
)和一个amt
以10为底的整数()来表示要变亮或变暗的数量。要变暗,请输入负数(即-20
)。
我这样做的原因是因为我找到了所有解决方案,到目前为止,它们似乎使问题变得过于复杂。我觉得只需几行代码就可以完成。如果您发现任何问题或进行任何调整以加快速度,请告诉我。
function LightenDarkenColor(col, amt) {
col = parseInt(col, 16);
return (((col & 0x0000FF) + amt) | ((((col >> 8) & 0x00FF) + amt) << 8) | (((col >> 16) + amt) << 16)).toString(16);
}
// TEST
console.log( LightenDarkenColor("3F6D2A",40) );
对于开发使用,这里是一个易于阅读的版本:
function LightenDarkenColor(col, amt) {
var num = parseInt(col, 16);
var r = (num >> 16) + amt;
var b = ((num >> 8) & 0x00FF) + amt;
var g = (num & 0x0000FF) + amt;
var newColor = g | (b << 8) | (r << 16);
return newColor.toString(16);
}
// TEST
console.log(LightenDarkenColor("3F6D2A", -40));
最后是处理可能(或可能没有)开头带有“#”的颜色的版本。加上调整不正确的颜色值:
function LightenDarkenColor(col,amt) {
var usePound = false;
if ( col[0] == "#" ) {
col = col.slice(1);
usePound = true;
}
var num = parseInt(col,16);
var r = (num >> 16) + amt;
if ( r > 255 ) r = 255;
else if (r < 0) r = 0;
var b = ((num >> 8) & 0x00FF) + amt;
if ( b > 255 ) b = 255;
else if (b < 0) b = 0;
var g = (num & 0x0000FF) + amt;
if ( g > 255 ) g = 255;
else if ( g < 0 ) g = 0;
return (usePound?"#":"") + (g | (b << 8) | (r << 16)).toString(16);
}
OK, so now it's not just a couple of lines, but it seems far simpler and if you're not using the "#" and don't need to check for colors out of range, it is only a couple of lines.
If not using the "#", you can just add it in code like:
var myColor = "3F6D2A";
myColor = LightenDarkenColor(myColor,10);
thePlaceTheColorIsUsed = ("#" + myColor);
I guess my main question is, am I correct here? Does this not encompass some (normal) situations?
我也做了一个简单的包装。我用了IR ^ 3的凸度
为了变暗,我使用了以下内容
为了减轻
这是包https://github.com/MarchWorks/colortone
演示https://colortone.now.sh/
用我做事的方式,如果您通过-1的比率,您将最终得到黑色,如果该比率为1,则最终将为白色。通过0会因为该比率不会改变颜色