HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。
Canvas 绘制图像
在使用 canvas 绘制图像时,canvas 画布左上角的坐标为(0, 0)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 绘制图像
......
</script>
</body>
</html>
改变 canvas 画布大小
注意:canvas 画布大小不可通过 css 来改变,只能通过属性方式设置,否则可能出现失帧的情况(当使用 css 方式改变 canvas 画布大小时,只是 cavas 标签的大小改变了,正真的绘图区域大小并没有改变,所以出现了失帧的情况)。
<canvas width="600" height="400"></canvas>
绘制直线
- 将画笔的落点处移至坐标(x,y)处
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.moveTo(x, y);
...
- 创建一条从上一个指定坐标点到坐标(x,y)的线段
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.lineTo(x, y);
...
- 开始绘制
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.stroke();
...
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 将画笔的落点处定在坐标(100, 100)处
context.moveTo(100, 100);
// 创建一条画笔落点处到坐标(200, 200)的线段
context.lineTo(200, 200);
// 开始绘制
context.stroke();
</script>
</body>
</html>
绘制虚线
- 设置实线部分与空白部分的长度
注意:setLineDash()方法的参数为一个数组。
1)参数是一个空数组,则表示绘制实线。
2)参数为[a, b],则元素 a 表示实线部分长度,元素 b 表示虚线部分长度
3)参数为[a, b, c],则元素 a 表示实线部分长度,元素 b 表示虚线部分长度,元素 c 表示实线部分长度,元素 a 表示虚线部分长度,元素 b 表示实线部分长度......,以此循环。
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.setLineDash(数组);
...
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 将画笔的落点处定在坐标(100, 100)处
context.moveTo(100, 100);
// 创建一条画笔落点处到坐标(200, 200)的线段
context.lineTo(200, 200);
// 设置实线部分长度为4,元虚线部分长度为6
context.setLineDash([4, 6]);
// 开始绘制
context.stroke();
</script>
</body>
</html>
绘制两条平行直线
- 开启一个新的绘制图层
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.beginPath();
...
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 将画笔的落点处定在坐标(100, 100)处
context.moveTo(100, 100);
// 创建一条画笔落点处到坐标(300,100)的线段
context.lineTo(300, 100);
// 开始绘制
context.stroke();
// 开启新的图层
context.beginPath();
// 将画笔的落点处定在坐标(100, 150)处
context.moveTo(100, 150);
// 创建一条画笔落点处到坐标(300, 150)的线段
context.lineTo(300, 150);
// 开始绘制
context.stroke();
</script>
</body>
</html>
绘制一个三角形
- 创建从当前点回到起始点的路径
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.closePath();
...
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 将画笔的落点处定在坐标(100, 100)处
context.moveTo(100, 100);
// 创建一条从上一个点(100, 100)到坐标(100,300)的线段
context.lineTo(100, 300);
// 创建一条从上一个点(100,300)到坐标(300,300)的线段
context.lineTo(300, 300);
// 创建从当前点(300,300)回到起始点(100, 100)的路径
context.closePath()
// 开始绘制
context.stroke();
</script>
</body>
</html>
线条样式
- 设置线两端的样式
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
// 默认值,设置线两端的样式为平直的边缘
context.lineCap = "butt" ;
// 设置线两端的样式为圆形线帽
context.lineCap = "round";
// 设置线两端的样式为正方形线帽
context.lineCap = "square";
...
- 设置两条线相交时的连接样式
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
// 默认值,设置两条线相交时的连接样式为尖角
context.lineJoin = "miter";
// 设置两条线相交时的连接样式为斜角
context.lineJoin = "bevel";
// 设置两条线相交时的连接样式为圆角
context.lineJoin = "round";
...
- 设置画笔的颜色、渐变或模式
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.strokeStyle = XXX;
...
- 设置线宽(像素),不需要带单位
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.lineWidth = XXX;
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 设置线两端的样式为圆形线帽
context.lineCap = "round";
// 设置两条线相交时的连接样式为圆角
context.lineJoin = "round";
// 设置线条的颜色为红色
context.strokeStyle = "red";
// 设置线条的宽度
context.lineWidth = "30";
// 将画笔的落点处定在坐标(100, 100)处
context.moveTo(100, 100);
// 创建一条从上一个点(100, 100)到坐标(100,300)的线段
context.lineTo(100, 300);
// 开始绘制
context.stroke();
</script>
</body>
</html>
- 设置两条线相交处内角与外角之间的距离
注意:只有当 context.lineJoin = "miter" 时,才有效。边角的角度越小,斜接长度就会越大。 如果斜接长度超过 miterLimit 的值,边角会以 lineJoin 的 "bevel" 样式来显示。
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.miterLimit = XXX;
...
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 设置线条的宽度
context.lineWidth = "5";
// 将画笔的落点处定在坐标(100, 100)处
context.moveTo(100, 100);
// 创建一条从上一个点(100, 100)到坐标(210,110)的线段
context.lineTo(210,110);
// 创建一条从上一个点(210,110)到坐标(100,120)的线段
context.lineTo(100, 120);
// 开始绘制
context.stroke();
// 开启新的图层
context.beginPath();
// 设置线条的宽度
context.lineWidth = "5";
// 设置两条线相交处内角与外角之间的距离
context.miterLimit= "15"
// 将画笔的落点处定在坐标(300, 100)处
context.moveTo(300, 100);
// 创建一条从上一个点(300, 100)到坐标(410,110)的线段
context.lineTo(410,110);
// 创建一条从上一个点(310,110)到坐标(300,320)的线段
context.lineTo(300, 120);
// 开始绘制
context.stroke();
</script>
</body>
</html>
绘制一个红色边框的黑色三角形
- 设置用于填充绘制的图形的颜色、渐变或模式。
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.fillStyle = XXX;
...
- 填充绘制的图形
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.fill();
...
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 设置画笔的颜色为红色
context.strokeStyle = "red";
// 设置线条的宽度
context.lineWidth= "5";
// 设置用于填充绘制的图形的颜色
context.fillStyle = "black";
// 将画笔的落点处定在坐标(100, 100)处
context.moveTo(100, 100);
// 创建一条从上一个点(100, 100)到坐标(100,300)的线段
context.lineTo(100, 300);
// 创建一条从上一个点(100,300)到坐标(300,300)的线段
context.lineTo(300, 300);
// 创建从当前点(300,300)回到起始点(100, 100)的路径
context.closePath()
// 开始绘制
context.stroke();
// 填充绘制图形
context.fill();
</script>
</body>
</html>
绘制矩形
- 创建矩形
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.rect(x, y, width, height);
...
1)参数说明:
参数 x:矩形左上角的 x 坐标。
参数 y:矩形左上角的 y 坐标。
参数 width:矩形的宽度,以像素计。
参数 height:矩形的高度,以像素计。
2) 注意事项:
context.rect(x, y, width, height); 只是创建了矩形,并没有绘制出来。因此,创建完成后需使用 context.stroke(); 来绘制。
3)示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 创建矩形
context.rect(50, 50, 200, 100);
// 开始绘制
context.stroke();
</script>
</body>
</html>
- 绘制已填充的矩形
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.fillRect(x, y, width, height);
...
1)参数说明:
参数 x:矩形左上角的 x 坐标。
参数 y:矩形左上角的 y 坐标。
参数 width:矩形的宽度,以像素计。
参数 height:矩形的高度,以像素计。
2)默认的填充颜色是黑色。可以使用 fillStyle 属性来设置用于填充绘图的颜色、渐变或模式。
3)示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 设置填充的颜色
context.fillStyle = "yellow";
// 绘制已填充的矩形
context.fillRect(50, 50, 200, 100);
</script>
</body>
</html>
- 绘制未填充矩形
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.strokeRect(x, y, width, height);
...
1)参数说明:
参数 x:矩形左上角的 x 坐标。
参数 y:矩形左上角的 y 坐标。
参数 width:矩形的宽度,以像素计。
参数 height:矩形的高度,以像素计。
2)笔触的默认颜色是黑色。
3)可以使用 strokeStyle 属性来设置笔触的颜色、渐变或模式。
4)示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 设置边框颜色
context.strokeStyle = "red";
// 绘制矩形
context.strokeRect(50, 50, 200, 100);
</script>
</body>
</html>
- 清除矩形
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.clearRect(x, y, width, height);
...
1)参数说明:
参数 x:要清除的矩形左上角的 x 坐标。
参数 y:要清除的矩形左上角的 y 坐标。
参数 width:要清除的矩形的宽度,以像素计。
参数 height:要清除的矩形的高度,以像素计。
小技巧:
当 x = 0,y = 0,width = canvas.width,height = canvas.height 时,则可以清除画布上的矩形
2)示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 绘制矩形
context.strokeRect(50, 50, 200, 100);
// 清除矩形
context.clearRect(0, 0, 1000, 1000);
</script>
</body>
</html>
绘制圆弧
- 创建圆弧
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.arc(x, y, r, sAngle, eAngle, counterclockwise);
...
1)参数说明:
参数 x:圆中心的 x 坐标。
参数 y:圆中心的 y 坐标。
参数 r:圆的半径。
参数 sAngle:起始角弧度(圆的三点钟位置是0度)。
参数 eAngle:结束角弧度(圆的三点钟位置是0度)。
参数 counterclockwise:规定逆时针还是顺时针绘图。f'alse = 顺时针,true = 逆时针。
2) 角度和弧度的关系:角度/弧度 = 180/pi
3)创建完圆弧后需使用 context.stroke(); 绘制创建的圆弧。
4)示例:绘制一个圆
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 创建一个圆(2π = 360°):圆心坐标为 (100, 100),半径为50
context.arc(100, 100, 50, 0, 2*Math.PI);
// 绘制圆
context.stroke();
</script>
</body>
</html>
5)示例:绘制圆上任意一点
圆上任意一点坐标:x = ox + r*cos(弧度),y = oy + r*cos(弧度)
ox:圆心的 x 坐标。
oy:圆心的 y 坐标。
r:圆的半径。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 创建一个圆(2π = 360°):圆心坐标为 (100, 100),半径为50
context.arc(100, 100, 50, 0, 2*Math.PI);
// 绘制圆
context.stroke();
// 开启一个新的图层
context.beginPath();
// 设置点的边框色
context.strokeStyle = "red";
// 设置点的填充色
context.fillStyle = "yellow";
// 点的坐标
var n = Math.random();
var x = 100 + Math.cos(Math.PI / n) * 50;
var y = 100 + Math.sin(Math.PI / n) * 50;
// 创建点
context.arc(x, y, 10, 0, 2*Math.PI);
// 绘制点
context.stroke();
// 填充点
context.fill();
</script>
</body>
</html>
绘制文本
- 文本属性
1)设置字体大小
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.font = "20px 微软雅黑";
...
2)设置字体水平对齐方式
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
// start:默认值,文本在指定的位置(绘制文字方法中的坐标)开始。
// end:文本在指定的位置(绘制文字方法中的坐标)结束。
// center:文本的中心被放置在指定的位置(绘制文字方法中的坐标)。
// left:文本在指定的位置(绘制文字方法中的坐标)开始。
// right:文本在指定的位置(绘制文字方法中的坐标)结束。
context.textAlign= "left";
...
2)设置字体垂直对齐方式
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
// alphabetic:默认值,文本基线是普通的字母基线。
// top:文本基线是 em 方框的顶端。
// hanging:文本基线是悬挂基线。
// middle:文本基线是 em 方框的正中。
// ideographic:文本基线是表意基线。
// bottom:文本基线是 em 方框的底端。
context.textBaseline = "middle";
...
textBaseline 属性在不同的浏览器上效果不同,特别是使用 "hanging" 或 "ideographic" 时。
3)设置文字阴影效果
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
// 设置文字阴影的颜色
context.shadowColor = XXX;
// 设置文字阴影的水平偏移量,正数表示向右偏移,负数表示向左偏移
context.shadowOffsetX = XXX;
// 设置文字阴影的垂直偏移量,正数表示向下偏移,负数表示向上偏移
context.shadowOffsetY = XXX;
// 设置文字阴影的模糊度
context.shadowBlur = XXX;
...
- 绘制填充文本
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.fillText(text, x, y);
...
1)参数说明:
参数 text:文本内容
参数 x:开始绘制文本的 x 坐标位置(相对于画布)。
参数 y:开始绘制文本的 y 坐标位置(相对于画布)。
2)默认的填充颜色是黑色。可以使用 fillStyle 属性来设置用于填充绘图的颜色、渐变或模式。
3)示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 设置文字大小
context.font = "20px 微软雅黑";
// 设置文字水平对齐方式:在指定的位置(fillText()中的坐标)开始
context.textAlign= "left";
// 设置文字垂直对齐方式
context.textBaseline = "middle";
// 设置文字阴影的颜色
context.shadowColor = "#EE3030";
// 设置文字阴影的水平偏移量
context.shadowOffsetX = 20;
// 设置文字阴影的垂直偏移量
context.shadowOffsetY = 20;
// 设置文字阴影的模糊度
context.shadowBlur = 3;
// 设置填充颜色
context.fillStyle = "red";
// 绘制文本
context.fillText("关注微信公众:remaizhan", 100, 100);
</script>
</body>
</html>
- 绘制镂空文本(未填充)
注意:字体越小,镂空的效果越不明显,建议字体不要小于15px。
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.strokeText(text, x, y);
...
1)参数说明:
参数 text:文本内容
参数 x:开始绘制文本的 x 坐标位置(相对于画布)。
参数 y:开始绘制文本的 y 坐标位置(相对于画布)。
2)默认的笔触颜色是黑色。可以使用 strokeStyle 属性来设置笔触的颜色、渐变或模式。
3)示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 设置文字大小
context.font = "20px 微软雅黑";
// 设置文字水平对齐方式:在指定的位置(fillText()中的坐标)开始
context.textAlign= "left";
// 设置文字垂直对齐方式
context.textBaseline = "middle";
// 设置文字阴影的颜色
context.shadowColor = "#EE3030";
// 设置文字阴影的水平偏移量
context.shadowOffsetX = 20;
// 设置文字阴影的垂直偏移量
context.shadowOffsetY = 20;
// 设置文字阴影的模糊度
context.shadowBlur = 3;
// 设置填充颜色
context.strokeStyle = "red";
// 绘制文本
context.strokeText("关注微信公众:remaizhan", 100, 100);
</script>
</body>
</html>
绘制图片
- 将图片绘制到画布的指定位置
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.drawImage(img, x, y);
...
1)参数说明:
参数 img:规定要使用的图像。
参数 x:在画布上放置图像的 x 坐标位置。
参数 y:在画布上放置图像的 y 坐标位置。
2)当图像的大小超出画布的大小时,超出的部分将不会被显示出来。
3)示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 加载图片
var img = document.createElement("img");
img.src = "1.jpg";
img.onload = function() {
// 将图片绘制到画布的(0, 0)坐标处
context.drawImage(img, 0, 0);
}
</script>
</body>
</html>
- 将图片绘制到画布的指定位置,且指定绘制后的大小(伸展或缩小图片)
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.drawImage(img, x, y, width, height);
...
1)参数说明:
参数 img:规定要使用的图像。
参数 x:在画布上放置图像的 x 坐标位置。
参数 y:在画布上放置图像的 y 坐标位置。
参数 width:要使用的图像的宽度(伸展或缩小图像)。
参数 height:要使用的图像的高度(伸展或缩小图像)。
2)因保持 width/height = img.width/img.height,否则绘制后的图片会失帧。
3)示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 加载图片
var img = document.createElement("img");
img.src = "1.jpg";
img.onload = function() {
// 将图片绘制到画布的(0, 0)坐标处,且绘制后的图片大小宽为400,高为300
context.drawImage(img, 0, 0, 400, 300);
}
</script>
</body>
</html>
- 将图片上的指定区域绘制到画布上的指定区域(剪切图片)
var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
...
context.drawImage(img, sx, sy, swidth, sheight, x, y, width, height);
...
1)参数说明:
参数 img:规定要使用的图像。
参数 sx:从图像的 sx 坐标位置开始剪切。
参数 sy:从图像的 sy 坐标位置开始剪切。
参数 swidth:剪切的宽度。
参数 sheight:剪切的高度。
参数 x:在画布上放置图像的 x 坐标位置。
参数 y:在画布上放置图像的 y 坐标位置。
参数 width:要使用的图像的宽度(伸展或缩小图像)。
参数 height:要使用的图像的高度(伸展或缩小图像)。
2)因保持 width/height = swidth/sheight,否则绘制后的图片会失帧。
3)示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 加载图片
var img = document.createElement("img");
img.src = "1.jpg";
img.onload = function() {
// 从图片的 (475, 500) 坐标处开始剪切宽为120高为150的图片,然后将其绘制到画布的 (100, 100) 坐标处,绘制后的图片宽为60,高为75
context.drawImage(img, 475, 500, 120, 150, 100, 100, 60, 75);
}
</script>
</body>
</html>
渐变
- 创建从坐标(x0, y0)到坐标(x1, y1)的线性渐变
context.createLinearGradient(x0, y0, x1, y1);
- 创建从以坐标(x0, y0)为圆心,r0为半径的圆到以坐标(x1, y1)为圆心,r1位半径的圆的径向渐变
context.createRadialGradient(x0, y0, r0, x1, y1, r1);
- 设置渐变的颜色和位置
var gradient1 = context.createLinearGradient(x0, y0, x1, y1);
gradient1.addColorStop(stop, color);
var gradient2 = context.createRadialGradient(x0, y0, r0, x1, y1, r1);
gradient2.addColorStop(stop, color);
stop:介于 0.0 与 1.0 之间的值,表示渐变中开始(0.0)与结束(1.0)之间的位置。
color:颜色。
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建 canvas 元素-->
<canvas width="1000" height="1000"></canvas>
<script type="text/javascript">
// 获取 canvas 元素
var canvas = document.querySelector("canvas");
// 创建 context 对象,相当于打开了画图工具
var context = canvas.getContext("2d");
// 创建线性渐变
var lineGradient = context.createLinearGradient(100, 100, 300, 100);
// 添加渐变颜色
lineGradient.addColorStop(0, "blue");
lineGradient.addColorStop(0.5, "red");
lineGradient.addColorStop(1, "yellow");
// 设置用于填充绘制的图形的渐变方案
context.fillStyle = lineGradient;
// 绘制用于填充渐变方案的矩形
context.rect(100, 100, 200, 100);
// 填充图形
context.fill();
// 开启一个新的图层
context.beginPath();
// 创建径向渐变
var radialGradient = context.createRadialGradient(250, 450, 50, 250, 450, 150);
// 添加渐变颜色
radialGradient.addColorStop(0, "blue");
radialGradient.addColorStop(0.5, "red");
radialGradient.addColorStop(1, "yellow");
// 设置用于填充绘制的图形的渐变方案
context.fillStyle = radialGradient;
// 绘制用于填充渐变方案的矩形
context.rect(100, 300, 300, 300);
// 填充图形
context.fill();
</script>
</body>
</html>