欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

HTML5 Canvas渐进填充与透明实现图像的Mask效果

程序员文章站 2023-12-10 14:25:22
本文将为大家详细介绍下Canvas中透明度的设置与使用,结合渐进填充与透明度支持,实现图像的Mask效果,线性渐进方式的代码演示如下,感兴趣的朋友可以参考下哈,希望对大家有所帮助... 13-07-11...
详细解释html5 canvas中渐进填充的参数设置与使用,canvas中透明度的设置与使用,结合渐进填充与透明度支持,实现图像的mask效果。

一:渐进填充(gradient fill)
canvas支持两种渐进填充方式,一种为线性渐进填充(line gradient fill),另外一种称
为经向渐变填充(radialgradient fill)。其api分别为:
createlineargradient(x1, y1, x2, y2);
其中x1,y1为第一个点坐标,x2,y2为第二个点坐标。
createradialgradient(x1, y1, r1, x2, y2, r2);
其中x1, y1为第一个中心点坐标,r1为半径,x2, y2为第二个中心点坐标,r2为半径。
为每个点设置颜色
addcolorstop(position, color);
其中position表示位置,大小范围[0~1]其中0表示第一个点,1表示第二个点坐标
color表示颜色值,任何css的颜色值。
渐进填充对象创建与配置之后可以用来设置context的strokestyle与fillstyle实现文字,
几何形状的渐进颜色填充。

线性渐进方式的代码演示:
1. 垂直(y)方向颜色渐进

复制代码
代码如下:

// vertical/y direction
var linegradient = ctx.createlineargradient (50, 0, 50, 200);
linegradient.addcolorstop(0, 'rgba(255, 0, 0, 1)');
linegradient.addcolorstop(1, 'rgba(255, 255, 0, 1)');
ctx.fillstyle = linegradient;
ctx.fillrect(0, 0, 300, 300);

HTML5 Canvas渐进填充与透明实现图像的Mask效果 
2. 水平(x)方向颜色渐进

复制代码
代码如下:

// horizontal/x direction
var linegradient = ctx.createlineargradient (0, 50, 200, 50);
linegradient.addcolorstop(0, 'rgba(255, 0, 0, 1)');
linegradient.addcolorstop(1, 'rgba(255, 255, 0, 1)');
ctx.fillstyle = linegradient;
ctx.fillrect(0, 0, 300, 300);

HTML5 Canvas渐进填充与透明实现图像的Mask效果 
3.垂直与水平同时(xy方向)颜色渐进

复制代码
代码如下:

// vertical and horizontal direction
var linegradient = ctx.createlineargradient (0, 0, 200, 200);
linegradient.addcolorstop(0, 'rgba(255, 0, 0, 1)');
linegradient.addcolorstop(1, 'rgba(255, 255, 0, 1)');
ctx.fillstyle = linegradient;
ctx.fillrect(0, 0, 300, 300);

HTML5 Canvas渐进填充与透明实现图像的Mask效果 
二:透明度(transparent)
canvas中透明度支持分为全局与局部透明设置,全局透明度的设置可以通过设置
context.globalalpha来实现。局部透明度可以通过fillstyle设置颜色值中alpha值通道
来实现。两种方式代码如下:
// change global alpha value
ctx.globalalpha=0.5;
ctx.fillrect(50,50,75,50);
// change fill style color's alphachannel
ctx.fillstyle = 'rgba(225,225,225,0.5)';
ctx.fillrect(50,50,75,50);
两个效果是一样的。

三:照片透明渐进mask效果
使用径向颜色渐变与透明度变化,实现在图像上的半透明面罩效果,脚本运行效果:
HTML5 Canvas渐进填充与透明实现图像的Mask效果 

复制代码
代码如下:

var myimage = document.createelement('img');
myimage.src = "../test.png";
myimage.onload = function() {
ctx.drawimage(myimage, 80, 30, myimage.naturalwidth, myimage.naturalheight);
var radialgradient = ctx.createradialgradient (canvas.width/2, canvas.height/2, 10, canvas.width/2, canvas.height/2, 200);
radialgradient.addcolorstop(0, 'rgba(247, 247, 247, 0)');
radialgradient.addcolorstop(0.7, 'rgba(120, 120, 120, 0.5)');
radialgradient.addcolorstop(0.9, 'rgba(0, 0, 0, 0.8)');
radialgradient.addcolorstop(1, 'rgba(238, 238, 238, 1)');
ctx.beginpath();
ctx.arc(canvas.width/2, canvas.height/2, 300, 0, math.pi * 2, true);
ctx.closepath();
ctx.fillstyle = radialgradient;
ctx.fill();
}