关于这个主题我找到的所有资料都只是将十六进制转换为RGB,然后添加一个alpha值为1。我想从十六进制数字中获取预期的alpha值。
像#949494E8
或#DCDCDC8F
这样的颜色显然具有不为0或1的alpha值。
关于这个主题我找到的所有资料都只是将十六进制转换为RGB,然后添加一个alpha值为1。我想从十六进制数字中获取预期的alpha值。
像#949494E8
或#DCDCDC8F
这样的颜色显然具有不为0或1的alpha值。
我制作了一个快速的JSfiddle表单,可以将8位十六进制代码转换为CSS rgba值;)
https://jsfiddle.net/teddyrised/g02s07n4/embedded/result/
其基础相当简单--将提供的字符串分成两位一组,并将其转换为alpha通道的百分比比率以及RGB通道的十进制数。 HTML标记如下:
<form action="">
<select id="format">
<option value="rgba">RGBa: RRGGBBAA</option>
<option value="argb">aRGB: AARRGGBB</option>
</select>
<input type="text" id="hex" value="#949494E8" />
<button>Convert</button>
</form>
<p id="rgba"></p>
逻辑:
// Remove hash
var hex = $('#hex').val().slice(1);
// Split to four channels
var c = hex.match(/.{1,2}/g);
// Function: to decimals (for RGB)
var d = function(v) {
return parseInt(v, 16);
};
// Function: to percentage (for alpha), to 3 decimals
var p = function(v) {
return parseFloat(parseInt((parseInt(v, 16)/255)*1000)/1000);
};
// Check format: if it's argb, pop the alpha value from the end and move it to front
var a, rgb=[];
if($('#format').val() === 'argb') {
c.push(c.shift());
}
// Convert array into rgba values
a = p(c[3]);
$.each(c.slice(0,3), function(i,v) {
rgb.push(d(v));
});
转换的要点如下:
parseInt(hexValue, 16)
。c.unshift(c.pop())
改为了c.push(c.shift())
。 - Noitidart这里有一个小提示:
在这种情况下,#DCDCDC8F
中的DC
是alpha
=220。
十六进制转十进制[DC]:
然后,220/255 = 0.86不透明度。
字节以AABBGGRR的顺序存储在小端机器的内存中。
#F5AA00
,我会得到正确的橙色rgba(245,170,0,1.0)
。但我需要原始值F5AA0091
中的alpha值为91
。 - Steve