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坐标体系

原文地址:https://www.cnblogs.com/mingliangge/p/12620037.html

时间: 2024-11-03 21:58:58

Canvas绘图基础的相关文章

Android中Canvas绘图基础详解(附源码下载)

Android中,如果我们想绘制复杂的自定义View或游戏,我们就需要熟悉绘图API.Android通过Canvas类暴露了很多drawXXX方法,我们可以通过这些方法绘制各种各样的图形.Canvas绘图有三个基本要素:Canvas.绘图坐标系以及Paint.Canvas是画布,我们通过Canvas的各种drawXXX方法将图形绘制到Canvas上面,在drawXXX方法中我们需要传入要绘制的图形的坐标形状,还要传入一个画笔Paint.drawXXX方法以及传入其中的坐标决定了要绘制的图形的形状

Android中Canvas绘图基础详解

原文:http://blog.csdn.net/iispring/article/details/49770651 Android中,如果我们想绘制复杂的自定义View或游戏,我们就需要熟悉绘图API.Android通过Canvas类暴露了很多drawXXX方法,我们可以通过这些方法绘制各种各样的图形.Canvas绘图有三个基本要素:Canvas.绘图坐标系以及Paint.Canvas是画布,我们通过Canvas的各种drawXXX方法将图形绘制到Canvas上面,在drawXXX方法中我们需要

Canvas绘图基础(一)

简单图形绘制 矩形:描边与填充 Canvas的API提供了三个方法,分别用于矩形的清除.描边及填充 clearRect(double x, double y, double w, double h) strokeRect(double x, double y, double w, double h) fillRect(double x, double y, double w, double h) 看一下这三个方法的使用 <!DOCTYPE html> <html lang="z

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

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> </head> <body> <script> //全局变量 var canvas = document.createElement('canvas'); var canvasContext

HTML5自学笔记[ 17 ]canvas绘图基础4

绘制图像: drawImage(oImg,x,y),oImg是一个Image对象,(x,y)为绘制起点,绘制的图像大小和源图大小一样. drawImage(oImg,x,y,w,h),后两个参数设置绘制后的图形大小. drawImage(oImg,x1,y1,w1,h1,x2,y2,w2,h2),该方法获取源图像的一部分进行绘制并且指定绘制起点和绘制后图像的大小,x1/y1/w1/h1表示选取源图上(x1,y1)点起宽w1高h1的部分,x2/y2/w2/h2表示将选取的部分绘制到画布(x2,y2

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

canvas绘制路径不仅可以绘制直线和多边形,还提供了绘制曲线的方法,利用这些方法可以画出多种曲线效果. 方法1:arc(x,y,r,起始弧度,结束弧度,绘制方向);其中(x,y)为圆心坐标,r为半径,弧度计算公式:deg*Math.PI/180,绘制方向默认为false表示顺时针绘制 ,设置为true时,逆时针绘制. 例1,顺时针绘制0-90°圆弧: 1 oContext.beginPath(); 2 3 oContext.arc(300,300,200,0,90*Math.PI/180,fa

HTML5自学笔记[ 15 ]canvas绘图基础6

关于线条的一些属性: lineCap,这个属性表示的是线条两端的样式,值有butt(默认)/round/square. lineJoin,这个属性表示线条相交的方式,值有miter(默认)/bevel/round: miterLimit,该属性指定默认情况下lineJoin采用miter方式的极限值:比如,在上面的例子中,将miterLimit设置为1,那么第一个图的两条线的相交方式就会自动转变为bevel.

Android中Canvas绘图之Shader使用图文详解

概述 我们在用Android中的Canvas绘制各种图形时,可以通过Paint.setShader(shader)方法为画笔Paint设置shader,这样就可以绘制出多彩的图形.那么Shader是什么呢?做过GPU绘图的同学应该都知道这个词汇,Shader就是着色器的意思.我们可以这样理解,Canvas中的各种drawXXX方法定义了图形的形状,画笔中的Shader则定义了图形的着色.外观,二者结合到一起就决定了最终Canvas绘制的被色彩填充的图形的样子. 类android.graphics

Android中Canvas绘图之PorterDuffXfermode使用及工作原理详解

概述 类android.graphics.PorterDuffXfermode继承自android.graphics.Xfermode.在用Android中的Canvas进行绘图时,可以通过使用PorterDuffXfermode将所绘制的图形的像素与Canvas中对应位置的像素按照一定规则进行混合,形成新的像素值,从而更新Canvas中最终的像素颜色值,这样会创建很多有趣的效果.当使用PorterDuffXfermode时,需要将将其作为参数传给Paint.setXfermode(Xfermo