rgba() 在 HTML5 Canvas 渐变中产生黑色调
rgba() is producing a blackish tone in HTML5 Canvas Gradient
我想在 HTML5 Canvas 上绘制三个渐变。但它并没有产生预期的效果。所以我稍微研究了一下,发现 rgba(0, 0, 0, 0)
在 canvas 渐变中使用时并不是完全透明的。相反,它产生了意想不到的黑色调。
在 CSS 中,它工作正常。
如何才能达到与 CSS 相同的效果? (请参阅随附的屏幕截图)
CSS 属性:
background: linear-gradient(rgba(0, 0, 0, 0), rgb(255, 0, 0));
Canvas 属性:
var grad = ctx.createLinearGradient(0, 0, 0, height);
grad.addColorStop(0, 'rgba(0, 0, 0, 0)');
grad.addColorStop(1, 'rgb(255, 0, 0)');
确实算法似乎不同。
不太清楚为什么,但我会说 CSS 并不像 canvas 那样将 rgba(0,0,0,0)
视为 透明黑色像素 确实如此,但与 transparent.
一样
2D canvas 将从所有 4 个 RGBA 通道值直接合成,直到下一站的值,而 CSS 似乎将透明理解为一种特殊情况。
要在 canvas 上获得与 CSS 相同的结果,您必须将第一个透明停止设置为下一个,只需更改 alpha 值:
var ctx = c.getContext('2d'),
grad = ctx.createLinearGradient(0,0,0,150);
grad.addColorStop(0, 'rgba(255,0,0,0)'); // transparent red
grad.addColorStop(1, 'rgba(255,0,0)');
ctx.fillStyle = grad;
ctx.fillRect(0,0,300,150);
#html{
background: linear-gradient(rgba(0, 0, 0, 0), rgb(255, 0, 0));
height: 150px;
width: 300px;
display: inline-block;
}
<div id="html"></div>
<canvas id="c"></canvas>
我想在 HTML5 Canvas 上绘制三个渐变。但它并没有产生预期的效果。所以我稍微研究了一下,发现 rgba(0, 0, 0, 0)
在 canvas 渐变中使用时并不是完全透明的。相反,它产生了意想不到的黑色调。
在 CSS 中,它工作正常。
如何才能达到与 CSS 相同的效果? (请参阅随附的屏幕截图)
CSS 属性:
background: linear-gradient(rgba(0, 0, 0, 0), rgb(255, 0, 0));
Canvas 属性:
var grad = ctx.createLinearGradient(0, 0, 0, height);
grad.addColorStop(0, 'rgba(0, 0, 0, 0)');
grad.addColorStop(1, 'rgb(255, 0, 0)');
确实算法似乎不同。
不太清楚为什么,但我会说 CSS 并不像 canvas 那样将 rgba(0,0,0,0)
视为 透明黑色像素 确实如此,但与 transparent.
2D canvas 将从所有 4 个 RGBA 通道值直接合成,直到下一站的值,而 CSS 似乎将透明理解为一种特殊情况。
要在 canvas 上获得与 CSS 相同的结果,您必须将第一个透明停止设置为下一个,只需更改 alpha 值:
var ctx = c.getContext('2d'),
grad = ctx.createLinearGradient(0,0,0,150);
grad.addColorStop(0, 'rgba(255,0,0,0)'); // transparent red
grad.addColorStop(1, 'rgba(255,0,0)');
ctx.fillStyle = grad;
ctx.fillRect(0,0,300,150);
#html{
background: linear-gradient(rgba(0, 0, 0, 0), rgb(255, 0, 0));
height: 150px;
width: 300px;
display: inline-block;
}
<div id="html"></div>
<canvas id="c"></canvas>