HTML5 Canvas 4 条线,每个线点都有渐变
HTML5 Canvas 4 Lines with gradient on each line point
自从我从 canvas 开始,我已经想出了如何制作菱形,但现在我需要从每个角开始使用自定义渐变来放置菱形
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext('2d');
var grd= ctx.createRadialGradient(0,0,1,0,0,150);
grd.addColorStop(0, "#ff737b");
grd.addColorStop(1, "#f78c21");
ctx.moveTo(25, 25); //1ª ponto esquerda
ctx.lineTo(100, 0); //2º ponto para direita
ctx.lineTo(75, 75); //3º ponto para baixo
ctx.lineTo(25, 75); //4º ponto para esquera
ctx.closePath();
ctx.fillStyle = grd;
ctx.fill();
<canvas id="myCanvas">Your browser does not support the HTML5 canvas tag.</canvas>
我需要这样的图片
颜色是:
TopLeft = #ce2908
TopRight = #5a6bc6
BottomRight = #8c3173
BottomLeft = #f78c21
我会这样做:
- 创建4个linearGradients,对应你的top-left,top-right,bottom -右 和 左下角 角。
- 让它们都停在中间点(这里
50,50
)。
- 将它们最终的
stop-color
改为rgba
中对应的值,alpha设置为0.1
这样,中心点几乎是透明的,所有中间颜色都会混合在一起。
注:
为了避免形状一般透明,可以先在它下面画一个白色的形状。为了让所有形状完全透明,将它们的第一个停止颜色更改为 rgba(r,g,b,0.8)
.
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext('2d');
var topLeft= ctx.createLinearGradient(25,25,50,50);
topLeft.addColorStop(0, "rgba(140, 49, 115, 1)");
topLeft.addColorStop(1, "rgba(140, 49, 115, .1)");
var topRight= ctx.createLinearGradient(100,25,50,50);
topRight.addColorStop(0, "rgba(90, 107, 198, 1)");
topRight.addColorStop(1, "rgba(90, 107, 198, .1)");
var bottomRight= ctx.createLinearGradient(75,75,50,50);
bottomRight.addColorStop(0, "rgba(247, 140, 33, 1)");
bottomRight.addColorStop(1, "rgba(247, 140, 33, .1)");
var bottomLeft= ctx.createLinearGradient(25,75,50,50);
bottomLeft.addColorStop(0, "rgba(206, 41, 8, 1)");
bottomLeft.addColorStop(1, "rgba(206, 41, 8, .1)");
ctx.beginPath();
ctx.moveTo(25, 25); //1ª ponto esquerda
ctx.lineTo(100, 0); //2º ponto para direita
ctx.lineTo(75, 75); //3º ponto para baixo
ctx.lineTo(25, 75); //4º ponto para esquera
/* // Uncomment to avoid transparency in the middle
ctx.fillStyle = "#FFF";
ctx.fill();
*/
ctx.fillStyle = bottomRight;
ctx.fill();
ctx.fillStyle = bottomLeft;
ctx.fill();
ctx.fillStyle = topLeft;
ctx.fill();
ctx.fillStyle = topRight;
ctx.fill();
<canvas id="myCanvas">Your browser does not support the HTML5 canvas tag.</canvas>
自从我从 canvas 开始,我已经想出了如何制作菱形,但现在我需要从每个角开始使用自定义渐变来放置菱形
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext('2d');
var grd= ctx.createRadialGradient(0,0,1,0,0,150);
grd.addColorStop(0, "#ff737b");
grd.addColorStop(1, "#f78c21");
ctx.moveTo(25, 25); //1ª ponto esquerda
ctx.lineTo(100, 0); //2º ponto para direita
ctx.lineTo(75, 75); //3º ponto para baixo
ctx.lineTo(25, 75); //4º ponto para esquera
ctx.closePath();
ctx.fillStyle = grd;
ctx.fill();
<canvas id="myCanvas">Your browser does not support the HTML5 canvas tag.</canvas>
我需要这样的图片
颜色是:
TopLeft = #ce2908
TopRight = #5a6bc6
BottomRight = #8c3173
BottomLeft = #f78c21
我会这样做:
- 创建4个linearGradients,对应你的top-left,top-right,bottom -右 和 左下角 角。
- 让它们都停在中间点(这里
50,50
)。 - 将它们最终的
stop-color
改为rgba
中对应的值,alpha设置为0.1
这样,中心点几乎是透明的,所有中间颜色都会混合在一起。
注:
为了避免形状一般透明,可以先在它下面画一个白色的形状。为了让所有形状完全透明,将它们的第一个停止颜色更改为 rgba(r,g,b,0.8)
.
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext('2d');
var topLeft= ctx.createLinearGradient(25,25,50,50);
topLeft.addColorStop(0, "rgba(140, 49, 115, 1)");
topLeft.addColorStop(1, "rgba(140, 49, 115, .1)");
var topRight= ctx.createLinearGradient(100,25,50,50);
topRight.addColorStop(0, "rgba(90, 107, 198, 1)");
topRight.addColorStop(1, "rgba(90, 107, 198, .1)");
var bottomRight= ctx.createLinearGradient(75,75,50,50);
bottomRight.addColorStop(0, "rgba(247, 140, 33, 1)");
bottomRight.addColorStop(1, "rgba(247, 140, 33, .1)");
var bottomLeft= ctx.createLinearGradient(25,75,50,50);
bottomLeft.addColorStop(0, "rgba(206, 41, 8, 1)");
bottomLeft.addColorStop(1, "rgba(206, 41, 8, .1)");
ctx.beginPath();
ctx.moveTo(25, 25); //1ª ponto esquerda
ctx.lineTo(100, 0); //2º ponto para direita
ctx.lineTo(75, 75); //3º ponto para baixo
ctx.lineTo(25, 75); //4º ponto para esquera
/* // Uncomment to avoid transparency in the middle
ctx.fillStyle = "#FFF";
ctx.fill();
*/
ctx.fillStyle = bottomRight;
ctx.fill();
ctx.fillStyle = bottomLeft;
ctx.fill();
ctx.fillStyle = topLeft;
ctx.fill();
ctx.fillStyle = topRight;
ctx.fill();
<canvas id="myCanvas">Your browser does not support the HTML5 canvas tag.</canvas>