一、基本绘图
首先,定义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) //重置
关于变换矩阵,有一篇很好的文章可以加深你的理解:http://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)
至此,基础知识已经总结完了,不过以上仅仅是基本的静态画布制作而已,如果你懂得灵活应用javascript,结合canvas就可以制作出很漂亮的动画或游戏。这些应用已经很多了,感兴趣可以查找相关信息。