Canvas绘图基础

Posted mingliangge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Canvas绘图基础相关的知识,希望对你有一定的参考价值。

Canvas

html5 <canvas> 元素用于图形的绘制,通过脚本 (通常是javascript)来完成.

<canvas> 标签只是图形容器,您必须使用脚本来绘制图形。

你可以通过多种方法使用 canvas 绘制路径,盒、圆、字符以及添加图像。

 

Canvas初始化

创建画布

canvas默认画布大小:300*150px

<canvas id="myCanvas" width="600px" height="300px">
    您的浏览器不支持canvas
</canvas>
<!-- 画布的宽高在html标签,或js中定义 -->
<!-- 若在css中定义宽高,画布会按照比例缩放在css的框内 -->

 

 用JavaScript绘制图像

所有绘制工作都通过下面js来操作

<script type="text/javascript">
    var myCanvas = document.getElementById(‘myCanvas‘);/*首先,找到 <canvas> 元素*/
    //若在js中定义画布的宽高
    //myCanvas.width=300;
    //myCanvas.height=150;
    var ctx = myCanvas.getContext(‘2d‘);/*然后,创建 context 对象*/
    // getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
</script>

Canvas坐标

canvas左上角坐标 (0,0)

技术图片

 

Canvas基础绘图

画直线

//先画好路径
ctx.moveTo(0,0); /*起点坐标*/
ctx.lineTo(200,100); /*终点坐标*/
//根据画好的路径开始描绘
ctx.stroke(); /*默认用黑色线条画*/

 

//画第二个形状的时候,要先结束前面的路径 ctx.begginPath(),不然会画多一遍

ctx.beginPath(); /*结束前面路径*/
ctx.moveTo(200,100);
ctx.lineTo(200,300);
ctx.strokeStyle = ‘red‘;/*更换画笔颜色*/
ctx.stroke();

 

闭合路径

ctx.beginPath(); /*结束前面路径*/
ctx.moveTo(200,100);
ctx.lineTo(200,250);
ctx.lineTo(50,250);
ctx.closePath();  /*就是把几个点封闭起来*/
ctx.stroke();

 

画圆

ctx.beginPath();
ctx.arc(200,100,100,0,2*Math.PI,true);
//1、2参数定义圆心,3参数半径,3、4参数圆的起始弧度和终止弧度(完整的圆是0-2Π),5参数是否逆时针画
ctx.strokeStyle = ‘green‘;
ctx.stroke();

 

画矩形

ctx.beginPath();
ctx.strokeRect(300,5,100,50);    //自带stroke方法
//1、2参数矩形左上角坐标,3、4参数矩形的宽高

//ctx.strokeRect(300,5,100,50); //意思是描边
//ctx.fillRect(300,5,100,50); //意思是填充

 

描边与填充

//stroke(描边)
ctx.moveTo(0,0);
ctx.lineTo(100,100);
ctx.lineTo(100,200);
ctx.strokeStyle = "cyan"; /*更换画笔*/
ctx.lineWidth = 5; /*定义画条的粗细*/
ctx.stroke();  /*开始描边*/
        
//fill(填充)
ctx.fillStyle = "black";/*填充的颜色*/
ctx.fill(); /*会以闭合的形式填充*/

 

 

图形变换

平移

//没画前平移
ctx.translate(0,100); /*横坐标平移0,纵坐标平移100。在没画之前,把坐标起始位置改变*/
ctx.moveTo(0,0); /* 坐标原点已经平移了,开始位置为(0,100) */
ctx.lineTo(100,100);
ctx.stroke();
//画过程中平移
ctx.moveTo(0,0);/*起点已经确认*/
ctx.translate(0,100);/*本来终点的纵坐标已经确认为100,经过平移后纵坐标为200*/
ctx.lineTo(100,100);/*实际终点坐标为(100,200)*/
ctx.stroke();
//画之后平移
ctx.moveTo(0,0);/*起点已经确认*/
ctx.lineTo(100,100);/*终点确认*/
ctx.translate(0,100);/*现在平移不会产生效果(起点终点已确认)。但是会影响后面的描边*/
ctx.stroke();

 旋转

//注意:之前的平移会决定后面的点

//起点没有旋转的线
ctx.moveTo(0,0);
ctx.lineTo(100,50);
ctx.stroke();
                
//起始旋转45度的线
ctx.beginPath();
ctx.rotate(Math.PI / 4); /* 圆点绕x轴旋转45度 */
ctx.moveTo(0,0);
ctx.lineTo(100,50);
ctx.strokeStyle = ‘red‘;
ctx.stroke();

 

 缩放

// 缩放要在画之前决定好
ctx.scale(1,0.5);/*横坐标不变,纵坐标缩放50%。*/
ctx.fillRect(0,0,100,100);

 

save和restore

//作用:解决图形变换对后面操作的影响

//save和restore一定要成对出现才有效果

ctx.save(); //保存前面绘画环境,包括变换和样式
/* 里面可以做任何图形变换的操作... */

ctx.restore(); //恢复之前保存的绘画环境,包括变换和样式
/* restore后面的任何操作,都不会受到图形变换的影响了 */

 

 

 Canvas渐变

 线性渐变

//1、确认线条的位置
var linearGradient = ctx.createLinearGradient(0,0,100,100);
// 创建一个线性渐变从第一个点(0,0),到第二个点(100,100)做渐变
        
//2、确认渐变的颜色(渐变至少有两种颜色)
linearGradient.addColorStop(0,‘red‘); //0%的时候是红色
linearGradient.addColorStop(.5,‘blue‘);//50%的时候是蓝色
linearGradient.addColorStop(1,‘green‘); //100%的时候是绿色
        
//3、用渐变的颜色作为填充色
ctx.fillStyle = linearGradient;
        
//4、画一个矩形,并填充颜色
ctx.fillRect(0,0,100,100);

 

径向渐变 

//1、确认径向渐变的位置
var radialGradient = ctx.createRadialGradient(200,200,0,200,200,100);
// 创建一个径向渐变对象,前三个参数是一个圆的圆心半径,后三个参数是另一个圆的圆心半径
                
//2、确认渐变的颜色(渐变至少有两种颜色)
radialGradient.addColorStop(0,‘red‘); //0%的时候是红色
radialGradient.addColorStop(.5,‘blue‘);//50%的时候是蓝色
radialGradient.addColorStop(1,‘green‘); //100%的时候是绿色
                
//3、用渐变的颜色作为填充色
ctx.fillStyle = radialGradient;
                
//4、画一个圆,并填充颜色
ctx.arc(200,200,100,0,2*Math.PI,true);
ctx.fill();

 

 

 Canvas文本

使用

//1、设置文本
var str = "你好啊!";
        
//2、看需求设置文本样式(与css的font的使用一致)
ctx.font = "50px 宋体"
        
//3、看需求设置水平对齐(用法如下图)
ctx.textAlign = "center";
//3、看需求设置垂直对齐(用法如下图)
ctx.textBaseline = "top";

//4、描边文本
ctx.strokeText(str,100,100);/* str表示需要描边的文本,(100,100)表示文本出现的位置 */
//4、填充文本
//ctx.fillText(str,100,200);/* str表示需要填充的文本,(100,200)表示文本出现的位置 */

 

 textAlign

技术图片

 textBaseline

 技术图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Canvas坐标体系

 

以上是关于Canvas绘图基础的主要内容,如果未能解决你的问题,请参考以下文章

Android绘图基础--Canvas和Drawable

炫丽的倒计时效果Canvas绘图与动画基础

HTML5自学笔记[ 14 ]canvas绘图基础2

图形基础篇02 # 指令式绘图系统:如何用Canvas绘制层次关系图?

canvas绘图基础及基于粒子系统的雪花飘落

图形基础篇02 # 指令式绘图系统:如何用Canvas绘制层次关系图?