3 回答
TA贡献1825条经验 获得超4个赞
我将考虑这个答案,其中详细说明了如何计算两层之间的颜色以编写以下脚本。
/* Utility function that you can easily find in the net */
function extractRgb (css) {
return css.match(/[0-9.]+/gi)
}
function rgbToHex(r, g, b) {
return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}
/**/
var c = window.getComputedStyle(document.getElementById('box')).backgroundColor;
c = extractRgb(c);
for(var i=0;i<3;i++)
c[i] = parseInt(c[i]*c[3] + 255*(1 - c[3])); /* Check the linked answer for details */
console.log(rgbToHex(c[0],c[1],c[2]) )
#box {
width: 100px;
height: 100px;
margin: 10px;
background-color: rgba(0, 0, 0, 0.3);
}
<div id="box"></div>
该脚本可以轻松改进,但主要思想是用于计算两种颜色之间结果的公式:
ColorF = (ColorT*opacityT + ColorB*OpacityB*(1 - OpacityT)) / factor
ColorF
是我们最终的颜色。ColorT
/ColorB
分别是顶部和底部颜色。opacityT
/opacityB
分别是为每种颜色定义的顶部和底部不透明度:该因子由该公式定义
OpacityT + OpacityB*(1 - OpacityT)
。
TA贡献1895条经验 获得超7个赞
我认为基本上你想做的是理解浏览器渲染的颜色 - 这与元素背景定义的颜色完全不同。
正如我在评论中所说,您有一个用半透明黑色定义的#box。根据它“后面”的元素是什么,您的颜色选择器将读取完全不同的内容(比较一下 #box 后面的红色背景和白色背景)。
我真的不知道如何继续获得真正的渲染颜色,但我想我会开始研究这样的东西:https ://developer.mozilla.org/en-US/docs/Web/API/ WebGLRenderingContext/readPixels
希望有帮助。
TA贡献1796条经验 获得超10个赞
一探究竟:
$(document).ready(function(){
alert(componentToHex($('#box').css('background-color')));
});
function componentToHex(c) {
var hex = c.toString(16);
return hex.length == 1 ? "0" + hex : hex;
}
function rgbToHex(r, g, b) {
return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b);
}
alert(rgbToHex(0, 51, 255));
#box {
width: 100px;
height: 100px;
margin: 10px;
background-color: rgba(0, 0, 0, 0.3);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div id="box"></div>
- 3 回答
- 0 关注
- 197 浏览
添加回答
举报