HTML5 Canvas绘制图像

608 阅读2分钟

什么是canvas?

HTML5新增加的canvas标签,用作绘图的容器,使用JS脚本来完成绘图

canvas画布是一个矩形区域,我们可以控制其每一像素去绘制路径、矩形、圆形、字符等等的方法。

如何创建Canvas元素?

创建canvas就是向HTML5界面添加canvas
方法:
注:必须在行内修改宽高,否则会造成绘制的图形有失帧的效果

<canvas width="600" height="400" id="canvas">

画布创建好了,那么如何绘制呢?

因为<canvas>元素没有自己的绘图功能(它只是图形的容器), 我们必须使用脚本来实际绘制图形。

getContext()方法返回一个对象,该对象提供在画布上绘制的方法和属性。

绘制过程

  1. 首先用JavaScript通过canvas的id来找到canvas元素:
var canvas = document.getElementById("canvas");
//获取画布对象
  1. 然后创建context对象:
var cxt = canvas.getContext('2d');
//getContext("2d")对象HTML5的内建对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。  
  1. 设置图形的填充颜色
 cxt.fillStyle = "#ff0000"; // 设置填充颜色
  1. 绘制一个实心矩形 默认填充色:黑色
cxt.fillRect(x, y, w, h); // 实心矩形  坐标(x, y)  宽高w, h
  1. 设置边框颜色
cxt.strokeStyle = "#ff0000"; // 设置填充颜色
  1. 空心矩形 默认填充色:黑色
ctx.strokeRect(x, y, w, h); // 实心矩形  坐标(x, y)  宽高w, h
  1. 设置线条宽度
ctx.lineWidth = 10;
  1. 清除一个矩形区域,类似于橡皮擦
ctx.clearRect(x, y, w, h);
  1. 设置阴影
ctx.shadowBlur = 5; // 设置阴影模糊度
ctx.shadowColor = "#ab15fd"; // 设置阴影颜色
ctx.shadowOffsetX = 20; // 设置阴影在x轴的偏移量
ctx.shadowOffsetY = 10; // 设置阴影在y轴的偏移量

实例--矩形

由上方法我们画出一个实心矩形:

<body>
    <canvas width="600" height="400" id="canvas">
<script>
	var canvas = document.getElementById("canvas");
	var cxt = canvas.getContext('2d');
	cxt.fillStyle = "#FFC0CB";//矩形填充颜色
	cxt.fillRect(0, 0, 100, 100);//在画布(0,0)位置画一个长100宽100的矩形
</script>
</body>

效果如下(给画布设了一个灰色背景):

再画出一个空心矩形:

<body>
    <canvas width="600" height="400" id="canvas">//绘制一个长600,宽400的画布
<script>
	var canvas = document.getElementById("canvas");
	var cxt = canvas.getContext('2d');
	cxt.strokeStyle="red";//边框颜色
	cxt.strokeRect(200, 200, 100, 100);//在画布(200,200)位置画一个长100宽100的矩形
</script>
</body>

实例--绘制路径

步骤:

  1. 创建路径
context.beginPath();
  1. 绘制形状
context.rect(10,10,100,100);
  1. 绘制
context.fill();//填充(也就是实心)
context.stroke();//边框(也就是空心)
  1. 关闭当前路径
context.closePath();

下面我们用canvas画一个三角形:

<body>
    <canvas id="canvas" width="800px" height="600px"></canvas>
<script>
    var canvas = document.getElementById("canvas");
    var context = canvas.getContext("2d");
	context.beginPath();//开始一条路径
	context.moveTo(10,10);//开始点
	context.lineTo(100,10);//转折点
	context.lineTo(10,100);//结束点
	context.closePath();//从当前点到开始点的路径
	context.lineWidth = 2;//线宽
	context.fill()//填充(实心,默认黑色)
</script>
</body>

效果如下:

实例--圆形

语法:

context.arc(x,y,r,sAngle,eAngle,counterclockwise);

x、y为圆心坐标,r为圆的半径,sAngle起始角,eAngle结束角,counterclockwise可选参数,默认顺时针绘制,false
下面用此语法画一个圆:

<body>
    <canvas id="canvas" width="800px" height="600px"></canvas>
<script>
    var canvas = document.getElementById("canvas");
    var context = canvas.getContext("2d");
    context.beginPath();
    context.arc(280,60,50,0,Math.PI * 1.8);
    context.closePath();
    context.stroke()
</script>
</body>

效果如下:

实例--渐变

语法:

context.createLinearGradient(x0,y0,x1,y1),创建一个渐变对象

(x0,y0)到(x1,y1)颜色逐渐渐变

<body>
	<canvas id="canvas" width="400px" height="300px"></canvas>
<script>
	var canvas = document.getElementById("canvas");
	var cxt = canvas.getContext("2d");
	var grad = cxt.createLinearGradient(0,0,400,300);
	grad.addColorStop(0,"red");
	grad.addColorStop(0.3,"yellow");
	grad.addColorStop(0.6,"pink");
	grad.addColorStop(1,"blue");
	cxt.fillStyle = grad;
	cxt.fillRect(0,0,400,300);
</script>
</body>

效果如下:

相关资料: 参考手册:HTML 5 < canvas > 标签