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

HTML5 CANVAS制图 基础总结

程序员文章站 2022-05-03 20:23:40
一、基本绘图     首先,定义2d渲染变量ct(这里用了jquery库):   var ct = $(#canvasid).get(0).getcontext('2d&...
一、基本绘图

 

  首先,定义2d渲染变量ct(这里用了jquery库):

 

var ct = $(#canvasid).get(0).getcontext('2d');

  以下是绘制各种基本图形的方法:

 

复制代码

//绘制矩形(填充/描框)

ct.fillrect(x,y,w,h)

ct.strokerect(x,y,w,h)

 

//绘制路径--线条

ct.beginpath();

ct.moveto(x0,y0);

ct.lineto(x1,y1);

ct.closepath();

ct.stroke();

 

//绘制路径--圆弧

ct.beginpath();

ct.arc(x,y,r,start,end,true);

ct.closepath();

ct.fill();

 

//绘制文本

ct.font = "30px serif...";

ct.filltext(txt,x,y);

ct.stroketext(txt,x,y);

 

//设置样式

ct.fillstyle = "rgb(r,g,b)";

ct.strokestyle = "rgb()";

ct.linewidth = 5;

复制代码

  还提供了一些灵活的方法:

 

//橡皮擦(擦除矩形范围)

ct.clearrect(x,y,w,h);

 

//重置样式

canvas.attr("width",w);

 

 

二、高级功能

 

  以下是对画布的一些变换操作:

 

复制代码

ct.save()/restore()  //保存/恢复

ct.translate(x,y)    //平移

ct.scale(a,b)        //放大、缩小

ct.rotate(math.pi)   //绕(0,0)旋转

 

//变换矩阵

ct.transform(xscale,yskew,xskew,yscale,xtrans,ytrans)   

ct.settransform(xscale,yskew,xskew,yscale,xtrans,ytrans) //重置 

复制代码

  关于变换矩阵,有一篇很好的文章可以加深你的理解:https://shawphy.com/2011/01/transformation-matrix-in-front-end.html

 

  这是些常用的操作:

 

复制代码

ct.globalalpha = 0.5    //透明度

 

//阴影

ct.shadowblur = 20;     //扩散

ct.shadowoffsetx = 10;

ct.shadowoffsety = 10;

ct.shadowcolor = rgba;

 

//渐变(线性/放射性)

ct.createlineargradient(x,y,x1,y1)

ct.createradialgradient(x,y,r,x1,y1,r1)

//设渐变的始终颜色

addcolorstop(0,"rgb()")/(1,"rgb()");

复制代码

  贝塞尔曲线绘制:

 

//最后两个参数是终点的坐标点

ct.beginpath();

ct.moveto(50,250);

ct.quadraticcurveto(250,100,450,250)  //两次贝塞尔曲线

ct.beziercurveto(150,50,350,450,450,250) //三次贝塞尔曲线

ct.stroke();

  画布导出为图像:

 

//生成图片的src地址

var imgurl = canvas.get(0).todataurl();

//以下将画布替换为图片

var img = $("<img></img>");

img.attr("src",imgurl);

canvas.replacewith(img);

 

 

三、图片处理

 

  图片的引入和调整(图片的变换就是画布的变换,不再介绍):

 

 

//引入图片

var img = new image();

img.src = ".jpg";

$(img).load(function(){

   ct.drawimage(参数);     

})

 

//图片调整

ct.drawimage(image,x,y,w,h)

//图片裁剪与调整,其中dx/dy/dw/dy为裁剪的参数

ct.drawimage(image,dx,dy,dw,dh,x,y,w,h) 

复制代码

  高级处理(关于图像像素的绘制和处理,仅供了解):

 

 

//imgdata对象

var imgdata = ct.getimagedata(x,y,w,h)  //获取

 

//imgdata对象的属性

imgdata.width/height    //宽高

imgdata.data            //像素集合数组,表示rgba

 

//创建图像

var imgdata = ct.createimagedata(w,h)   

ct.putimagedata(imgdata,x,y)

 

 

 

  以上都是比较基本的知识点总结,没写的太细,只求清晰易查及备忘,如果对哪个点不是很明白,完全可以复制关键字google。

 

  至此,基础知识已经总结完了,不过以上仅仅是基本的静态画布制作而已,如果你懂得灵活应用javascript,结合canvas就可以制作出很漂亮的动画或游戏。这些应用已经很多了,感兴趣可以自行查找相关信息,不过首先你得学会js.