canvas包含哪些绘图方法

1. 概述

Canvas 是 HTML5 的新元素,本质上是一个可以使用脚本(通常是JavaScript)在其中绘制图形的区域。通过Canvas,不仅可以绘制简单的2D图形,还可以绘制复杂的图像和动画、视频等。本文将介绍Canvas中常用的绘图方法。

2. 绘制矩形

在Canvas中,绘制矩形是最简单的任务之一。可以使用 fillRect() 方法为矩形填充颜色,使用 strokeRect() 方法为矩形描边,也可以使用 rect() 方法绘制矩形路径。

2.1 fillRect() 方法

fillRect() 方法用于为矩形填充颜色,其语法如下:

ctx.fillRect(x, y, width, height);

其中,xy 分别表示矩形左上角的坐标,widthheight 分别表示矩形的宽度和高度。下面是一个绘制矩形的例子:

<canvas id="myCanvas" width="200" height="100"></canvas>

var canvas = document.getElementById("myCanvas");

var ctx = canvas.getContext("2d");

ctx.fillStyle = "#FF0000";

ctx.fillRect(0, 0, 150, 75);

上面的代码会在画布上绘制一个红色的矩形。

2.2 strokeRect() 方法

strokeRect() 方法用于为矩形描边,其语法如下:

ctx.strokeRect(x, y, width, height);

其参数含义与 fillRect() 方法相同。下面是一个绘制描边矩形的例子:

<canvas id="myCanvas" width="200" height="100"></canvas>

var canvas = document.getElementById("myCanvas");

var ctx = canvas.getContext("2d");

ctx.strokeStyle = "#FF0000";

ctx.lineWidth = 3;

ctx.strokeRect(0, 0, 150, 75);

上面的代码会在画布上绘制一个红色的描边矩形。

2.3 rect() 方法

rect() 方法用于创建矩形路径,语法如下:

ctx.rect(x, y, width, height);

生成的路径可以用于绘制图形或者作为其他用途。下面是一个绘制矩形路径的例子:

<canvas id="myCanvas" width="200" height="100"></canvas>

var canvas = document.getElementById("myCanvas");

var ctx = canvas.getContext("2d");

ctx.beginPath();

ctx.rect(20, 20, 150, 75);

ctx.fillStyle = "#FF0000";

ctx.fill();

ctx.lineWidth = 3;

ctx.strokeStyle = "#000000";

ctx.stroke();

上面的代码生成了一个矩形路径,并且为其填充了红色,描边为黑色。

3. 绘制圆形

Canvas中绘制圆形的方式有三种:使用 arc() 方法、使用 arcTo() 方法和使用 ellipse() 方法。下面将分别介绍这三种方法。

3.1 arc() 方法

arc() 方法用于创建弧形或圆形,语法如下:

ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise);

其中,xy 表示圆心的坐标,radius 表示圆的半径,startAngleendAngle 表示圆弧的起始角度和结束角度(弧度制),anticlockwise 表示是否逆时针绘制,默认为顺时针。

下面是一个绘制圆形的例子:

<canvas id="myCanvas" width="200" height="100"></canvas>

var canvas = document.getElementById("myCanvas");

var ctx = canvas.getContext("2d");

ctx.beginPath();

ctx.arc(100, 50, 30, 0, 2*Math.PI);

ctx.fillStyle = "#FF0000";

ctx.fill();

ctx.lineWidth = 3;

ctx.strokeStyle = "#000000";

ctx.stroke();

上面的代码生成了一个半径为30像素的圆,并且为其填充了红色,描边为黑色。

3.2 arcTo() 方法

arcTo() 方法用于创建两个切线与圆弧相交的点,语法如下:

ctx.arcTo(x1, y1, x2, y2, radius);

其中,x1y1 表示第一个切线与圆弧的交点坐标,x2y2 表示第二个切线与圆弧的交点坐标,radius 表示圆弧的半径。

下面是一个绘制圆弧的例子:

<canvas id="myCanvas" width="200" height="100"></canvas>

var canvas = document.getElementById("myCanvas");

var ctx = canvas.getContext("2d");

ctx.beginPath();

ctx.moveTo(10, 10);

ctx.lineTo(100, 10);

ctx.arcTo(120, 10, 120, 30, 20);

ctx.lineTo(120, 80);

ctx.stroke();

上面的代码生成了一个从起点开始的一条直线,与一段圆弧和一条垂直线相交,并且得到了一个路径。描边颜色为黑色。

3.3 ellipse() 方法

ellipse() 方法用于创建椭圆形,语法如下:

ctx.ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);

其中,xy 表示中心点的坐标,radiusXradiusY 表示椭圆半径,rotation 表示旋转角度(弧度制),startAngleendAngle 表示椭圆弧的起始角度和结束角度(弧度制),anticlockwise 表示是否逆时针绘制,默认为顺时针。

下面是一个绘制椭圆形的例子:

<canvas id="myCanvas" width="200" height="100"></canvas>

var canvas = document.getElementById("myCanvas");

var ctx = canvas.getContext("2d");

ctx.beginPath();

ctx.ellipse(100, 50, 50, 30, Math.PI/4, 0, 2*Math.PI);

ctx.fillStyle = "#FF0000";

ctx.fill();

ctx.lineWidth = 3;

ctx.strokeStyle = "#000000";

ctx.stroke();

上面的代码生成了一个中心点坐标为(100,50),长半轴为50像素,短半轴为30像素的椭圆,并且为其填充了红色,描边为黑色。

4. 绘制路径和曲线

4.1 beginPath() 方法

在Canvas中,beginPath() 方法用于启动一个新路径或重置当前路径。当需要创建新的路径时,调用这个方法即可。

4.2 moveTo() 和 lineTo() 方法

在Canvas中,使用 moveTo() 方法将绘图游标移到指定坐标处,在此基础上使用 lineTo() 方法开始绘制一条直线,其语法如下:

ctx.moveTo(x, y);

ctx.lineTo(x, y);

其中,xy 表示直线的终点坐标。

下面是一个绘制路径的例子:

<canvas id="myCanvas" width="200" height="100"></canvas>

var canvas = document.getElementById("myCanvas");

var ctx = canvas.getContext("2d");

ctx.beginPath();

ctx.moveTo(10, 10);

ctx.lineTo(50, 50);

ctx.lineTo(10, 50);

ctx.fillStyle = "#FF0000";

ctx.fill();

ctx.strokeStyle = "#000000";

ctx.stroke();

上面的代码生成了一个三角形,并且为其填充了红色,描边为黑色。

4.3 quadraticCurveTo() 方法

quadraticCurveTo() 方法用于创建一条二次贝塞尔曲线,语法如下:

ctx.quadraticCurveTo(cpx, cpy, x, y);

其中,cpxcpy 表示控制点的坐标,xy 表示终点坐标。

下面是一个绘制二次贝塞尔曲线的例子:

<canvas id="myCanvas" width="200" height="100"></canvas>

var canvas = document.getElementById("myCanvas");

var ctx = canvas.getContext("2d");

ctx.beginPath();

ctx.moveTo(10, 10);

ctx.quadraticCurveTo(100, 100, 190, 10);

ctx.lineWidth = 3;

ctx.strokeStyle = "#000000";

ctx.stroke();

上面的代码生成了一个从(10,10) 到 (190,10)的路径,并使用贝塞尔曲线连接。

4.4 bezierCurveTo() 方法

bezierCurveTo() 方法用于创建一条三次贝塞尔曲线,语法如下:

ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);

其中,cp1xcp1y 表示第一个控制点的坐标,cp2xcp2y 表示第二个控制点的坐标,xy 表示终点坐标。

下面是一个绘制三次贝塞尔曲线的例子:

<canvas id="myCanvas" width="200" height="100"></canvas>

var canvas = document.getElementById("myCanvas");

var ctx = canvas.getContext("2d");

ctx.beginPath();

ctx.moveTo(10, 10);

ctx.bezierCurveTo(30, 50, 170, 50, 190, 10);

ctx.lineWidth = 3;

ctx.strokeStyle = "#000000";

ctx.stroke();

上面的代码生成了一个从(10,10) 到 (190,10)的路径,并使用三次贝塞尔曲线连接。

5. 绘制文本

在Canvas中,可以使用 fillText()strokeText() 方法在画布上绘制文本。

5.1 fillText() 方法

fillText() 方法用于在画布上填充文本,语法如下:

ctx.fillText(text, x, y, maxWidth);

其中,text 表示要填充的文本,xy 表示文本的起点坐标,maxWidth 表示文本的最大宽度。

下面是一个填充文本的例子:

<canvas id="myCanvas" width="200" height="100"></canvas>

var canvas = document.getElementById("myCanvas");

var ctx = canvas.getContext("2d");

ctx.font = "30px Arial";

ctx.fillStyle = "#FF0000";

ctx.fillText("Hello World", 10, 50);

上面的代码在画布上填充了一个红色的 “Hello World” 文本。

5.2 strokeText() 方法

strokeText() 方法用于在画布上描边文本,语法如下:

ctx.strokeText(text, x, y, maxWidth);

参数含义与 fillText() 方法相同。下面是一个描边文本的例子:

<canvas id="myCanvas" width="200" height="100"></canvas>

var canvas = document.getElementById("myCanvas");

var ctx = canvas.getContext("2d");

ctx.font = "30px Arial";

ctx.strokeStyle = "#FF0000";

ctx.strokeText("Hello World", 10, 50);

上面的代码在画布上描边了一个红色的 “Hello World” 文本。

6. 绘制图像

在Canvas中,可以使用 drawImage() 方法在画布上绘制图像。使用这个方法需要一个Image对象,也可以使用视频或者画布作为源。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。