首页 理论教育使用CanvasAPI绘制图像|HTML5实战宝典

使用CanvasAPI绘制图像|HTML5实战宝典

【摘要】:在HTML中定义好Canvas标签后,需要通过JavaScript进行图形的绘制。Canvas只是一个HTML5画布元素,它本身只是一个标签,并不具备绘制功能。返回值一个Canvas Rendering Context2D对象,我们通过这个对象来绘制图形。图7-3Canvas元素绘制图像的时候有两种方法,分别是:style:在进行图形绘制前,要通过以下几个属性设置好绘图的样式,分别可以通过三种方式来设置填充颜色。beginPath()与closePath()结合使用,主要作用是避免绘制之间的相互影响。图7-15镜像渐变:代码清单:绘制镜像渐变。

在HTML中定义好Canvas标签后,需要通过JavaScript进行图形的绘制。

Canvas只是一个HTML5画布元素,它本身只是一个标签,并不具备绘制功能。如果要绘制图形,首先我们要获取到绘图环境,我们需要JavaScript给我们提供的API来对画布进行操作:

getContext()方法返回一个用于在画布上绘图的环境对象,通过使用该对象的属性、方法来进行图像绘制。

(1)语法

978-7-111-55813-2-Chapter07-9.jpg

(2)参数

参数contextID指定了您想要在画布上绘制的类型。目前我们可以填写的值为"2d"(注意:2d的字母d必须要小写),指定绘制类型为二维绘图,并且通过这个方法返回一个环境对象,该对象导出一个二维绘图API。

(3)返回值

一个Canvas Rendering Context2D对象,我们通过这个对象来绘制图形。

代码清单:通过脚本获取绘图环境。

978-7-111-55813-2-Chapter07-10.jpg

效果如图7-3所示。

Canvas坐标系:

画布左上角为坐标原点(0,0),横向为x轴,纵向为y轴。效果如图7-3所示。

978-7-111-55813-2-Chapter07-11.jpg

图7-3

Canvas元素绘制图像的时候有两种方法,分别是:

978-7-111-55813-2-Chapter07-12.jpg

style:在进行图形绘制前,要通过以下几个属性设置好绘图的样式,分别可以通过三种方式来设置填充颜色。

rgb方式:

978-7-111-55813-2-Chapter07-13.jpg

十六进制方式:

978-7-111-55813-2-Chapter07-14.jpg

单词方式:

978-7-111-55813-2-Chapter07-15.jpg

颜色的表示方式:

直接用颜色名称:"red""green""blue”

十六进制颜色值:"#EEEEFF”

rgb(1-255,1-255,1-255)

rgba(1-255,1-255,1-255,透明度)

绘制填充矩形:

定义和用法

fillRect()方法绘制“已填色”的矩形。默认的填充颜色是黑色。

提示

使用fillstyle属性来设置用于填充绘图的颜色、渐变或模式(后续章节会介绍渐变填充),

JavaScript语法:

978-7-111-55813-2-Chapter07-16.jpg

参数值如表7-1所示。

表7-1

978-7-111-55813-2-Chapter07-17.jpg

代码清单:绘制填充矩形。

978-7-111-55813-2-Chapter07-18.jpg

效果如图7-4所示。

978-7-111-55813-2-Chapter07-19.jpg

图7-4

绘制矩形框:定义和用法。

strokeRect()方法绘制一个描边效果的矩形。笔触的默认颜色是黑色。

提示

请使用strokeStyle属性来设置笔触的颜色、渐变或模式(后续章节会介绍渐变填充)。

JavaScript语法为:

978-7-111-55813-2-Chapter07-20.jpg

参数值如表7-2所示。

978-7-111-55813-2-Chapter07-21.jpg

表7-2

代码清单:绘制矩形框。

978-7-111-55813-2-Chapter07-22.jpg

效果如图7-5所示。

978-7-111-55813-2-Chapter07-23.jpg

图7-5

绘制路径:

beginPath()开始一条路径,或重置当前的路径。

moveTo(x,y)设置路径起点坐标(x,y)。

lineTo():添加一个新点,然后创建从该点到画布中最后指定点的路径(该方法只设定位置并不会绘制线条)。

closePath():创建从当前点到开始点的路径。

beginPath()与closePath()结合使用,主要作用是避免绘制之间的相互影响。

代码清单:绘制矩形框。

978-7-111-55813-2-Chapter07-24.jpg

效果如图7-6所示。

978-7-111-55813-2-Chapter07-25.jpg

图7-6

绘制圆形或者椭圆

arc()方法创建弧/曲线(用于创建圆或部分圆)。

提示

如需通过arc()来创建圆,请把起始角设置为0,结束角设置为2*Math.PI,如图7-7所示。

978-7-111-55813-2-Chapter07-26.jpg

图7-7

978-7-111-55813-2-Chapter07-27.jpg

JavaScript 语法:

978-7-111-55813-2-Chapter07-28.jpg

参数值如表7-3所示。

表7-3

978-7-111-55813-2-Chapter07-29.jpg

代码清单:绘制圆形框。

978-7-111-55813-2-Chapter07-30.jpg

978-7-111-55813-2-Chapter07-31.jpg

效果如图7-8所示。

978-7-111-55813-2-Chapter07-32.jpg

图7-8(www.chuimin.cn)

绘制弧线:

arcTo()方法在画布上创建介于两个切线之间的弧/曲线。

提示

请使用stroke()方法在画布上绘制确切的弧。

JavaScript语法:

978-7-111-55813-2-Chapter07-33.jpg

参数值如表7-4所示。

表7-4

978-7-111-55813-2-Chapter07-34.jpg

代码清单:绘制弧线。

978-7-111-55813-2-Chapter07-35.jpg

978-7-111-55813-2-Chapter07-36.jpg

效果如图7-9所示。

978-7-111-55813-2-Chapter07-37.jpg

图7-9

绘制二次贝塞尔曲线:

quadraticCurveTo()方法:通过使用表示二次贝塞尔曲线的指定控制点,向当前路径添加一个点。

提示

二次贝塞尔曲线需要两个点。第一个点是用于二次贝塞尔计算中的控制点,第二个点是曲线的结束点。曲线的开始点是当前路径中最后一个点。如果路径不存在,那么请使用beginPath()和moveTo()方法来定义开始点,效果如图7-10所示。

978-7-111-55813-2-Chapter07-38.jpg

图7-10

开始点:moveTo(20,20)

结束点:quadraticCurveTo(20,100,200,20);

JavaScript语法:

978-7-111-55813-2-Chapter07-39.jpg

参数值如表7-5所示。

表7-5

978-7-111-55813-2-Chapter07-40.jpg

代码清单:绘制二次贝赛尔曲线。

978-7-111-55813-2-Chapter07-41.jpg

效果如图7-11所示。

978-7-111-55813-2-Chapter07-42.jpg

图7-11

绘制三次贝塞尔曲线:

定义和用法:bezierCurveTo()方法使用表示三次贝塞尔曲线的指定控制点,向当前路径添加一个点。

提示

三次贝塞尔曲线需要三个点。前两个点是用于三次贝塞尔计算中的控制点,第三个点是曲线的结束点。曲线的开始点是当前路径中最后一个点。如果路径不存在,那么请使用beginPath()和moveTo()方法来定义开始点,效果如图7-12所示。

978-7-111-55813-2-Chapter07-43.jpg

图7-12

开始点:moveTo(20,20)

结束点:bezierCurveTo(20,100,200,100,200,20)

JavaScript语法:

978-7-111-55813-2-Chapter07-44.jpg

参数值如表7-6所示。

表7-6

978-7-111-55813-2-Chapter07-45.jpg

代码清单:绘制三次贝塞尔曲线。

978-7-111-55813-2-Chapter07-46.jpg

978-7-111-55813-2-Chapter07-47.jpg

效果如图7-13所示。

978-7-111-55813-2-Chapter07-48.jpg

图7-13

绘制渐变:

Context对象可以通过createLinearGradient()和createRadialGradient()两个方法创建渐变对象,这两个方法的原型如下:

978-7-111-55813-2-Chapter07-49.jpg

创建一个从(x1,y1)点到(x2,y2)点的线性渐变对象的代码如下所示。

978-7-111-55813-2-Chapter07-50.jpg

创建一个从以(x1,y1)点为圆心、r1为半径的圆到以(x2,y2)点为圆心、r2为半径的圆的径向渐变对象的效果如图7-14所示。

978-7-111-55813-2-Chapter07-51.jpg

图7-14

渐变对象创建完成之后必须使用它的addColorStop()方法来添加颜色,该方法的原型如下:

978-7-111-55813-2-Chapter07-52.jpg

其中position表示添加颜色的位置,取值范围为[0,1],0表示起点,1表示终点;color表示添加的颜色,取值可以是任何CSS颜色值。

线性渐变:

代码清单:绘制线性渐变。

978-7-111-55813-2-Chapter07-53.jpg

效果如图7-15所示。

978-7-111-55813-2-Chapter07-54.jpg

图7-15

镜像渐变:

代码清单:绘制镜像渐变。

978-7-111-55813-2-Chapter07-55.jpg

978-7-111-55813-2-Chapter07-56.jpg

效果如图7-16所示。

978-7-111-55813-2-Chapter07-57.jpg

图7-16

阴影效果也是我们常用的表现方式,阴影有四个状态值控制,分别是shadowBlur,shadowOffsetX,shadowOffsetY和shadowColor。其中shadowBlur为阴影的像素模糊值,shadowOffsetX和shadowOffsetY为阴影在x轴和y轴上的偏移值,shadowColor为阴影颜色值,其中默认的值是前三个值都为0,最后一个值设置为透明黑色。只需修改其中的两个值就可以显现出来阴影效果。

阴影常用API如表7-7所示。

表7-7

978-7-111-55813-2-Chapter07-58.jpg

代码清单:绘制阴影。

978-7-111-55813-2-Chapter07-59.jpg

978-7-111-55813-2-Chapter07-60.jpg

效果如图7-17所示。

978-7-111-55813-2-Chapter07-61.jpg

图7-17