我想知道如何将rgba
转换为hex
,以一种方式将可见的rgba颜色(包括透明度)转换为十六进制值。
比如我有这个:
rgba(0,129,255,.4)
这种颜色有点像 "淡蓝色"...
我想知道是否有一种方法可以获得与屏幕上可见颜色相似的十六进制轻蓝色。我不想要转换后的#0081ff
,而是想要接近屏幕上可见颜色的东西。
问题:
如何将rgba转换为透明度调整的十六进制?
我想知道如何将rgba
转换为hex
,以一种方式将可见的rgba颜色(包括透明度)转换为十六进制值。
比如我有这个:
rgba(0,129,255,.4)
这种颜色有点像 "淡蓝色"...
我想知道是否有一种方法可以获得与屏幕上可见颜色相似的十六进制轻蓝色。我不想要转换后的#0081ff
,而是想要接近屏幕上可见颜色的东西。
问题:
如何将rgba转换为透明度调整的十六进制?
这取决于您的透明颜色将应用到哪种背景上。但是,如果您知道背景的颜色(例如白色),则可以计算在特定背景下应用RGBA颜色后得出的RGB颜色。
这只是颜色和背景的加权平均值,权重是Alpha通道(从0到1):
Color = Color * alpha + Background * (1 - alpha);
针对您的透明浅蓝色 rgba(0,129,255,.4)
在白色 rgb(255,255,255)
上的表现:
Red = 0 * 0.4 + 255 * 0.6 = 153
Green = 129 * 0.4 + 255 * 0.6 = 204.6
Blue = 255 * 0.4 + 255 * 0.6 = 255
哪个是 rgb(153,205,255)
或者 #99CDFF
function hexify(color) {
var values = color
.replace(/rgba?\(/, '')
.replace(/\)/, '')
.replace(/[\s+]/g, '')
.split(',');
var a = parseFloat(values[3] || 1),
r = Math.floor(a * parseInt(values[0]) + (1 - a) * 255),
g = Math.floor(a * parseInt(values[1]) + (1 - a) * 255),
b = Math.floor(a * parseInt(values[2]) + (1 - a) * 255);
return "#" +
("0" + r.toString(16)).slice(-2) +
("0" + g.toString(16)).slice(-2) +
("0" + b.toString(16)).slice(-2);
}
var myHex = hexify('rgba(57,156,29,0.05)'); // "#f5faf3"
console.log(myHex);