- Canvas 简介- 使用 Canvas 绘制图形- Canvas 常用方法- SVG 简介- 使用 SVG 绘制基本图形
1 Canvas 简介
Canvas 表示画布,现实生活中的画布是用来作画的。
HTML5 中的 Canvas :我们可以称它为“网页中的画布”。默认情况下,Canvas 是一块 300px*150px 的矩形画布,用户可以自定义画布的大小或为画布添加其他属性。
利用 Canvas 实现绘画:Canvas 并不是通过鼠标绘画的,而是用户需要通过 JavaScript 来控制画布中的内容,例如添加图片、线条、文字等。
2 使用 Canvas 绘制图形
2.1 <canvas> 标签
使用 HTML5 中的 <canvas> 标签在网页中创建一个画布,语法格式如下:
<canvas id="canvas" width="400" height="300">
您的浏览器不支持canvas标签,请更新浏览器
</canvas>
上述代码定义了一个 id 为 canvas 的画布,并设置了画布的宽度为 400px,高度为 300px。
通过 JavaScript 的 getElementById() 方法获取到网页中的画布对象,代码如下所示:
var canvas = document.getElementById("canvas");
上述代码获取了 id 为 canvas 的画布,同时将获取的画布对象保存在变量 canvas 中。
context 对象:是画布的上下文,也叫做绘制环境,是所有的绘制操作 API 的入口。 context 对象可以使用 getContext() 方法获得,代码如下所示:
var context = canvas.getContext('2d');
上述代码中的参数 2d
代表画笔的种类,表示二维绘图的画笔。如果想要绘制三维图,可以把参数替换为 webgl
。
2d:代表一个平面,绘制图形时需要在平面上确定起始点,也就是“从哪里开始画”,这个点需要通过坐标来控制。
Canvas 的坐标系:从最左上角 0,0
开始。x 轴向右逐渐增加,y 轴向下逐渐增加。
2.2 绘制线条
线的定义:线是所有复杂图形的组成基础,想要绘制复杂的图形,首先要从绘制线开始。
线的组成:在绘制线之前首先要了解线的组成。一条最简单的线由三部分组成,分别为初始位置、连线端点以及描边。
初始位置:在绘制图形时,我们首先需要确定从哪里下“笔”,这个下“笔”的位置就是初始位置。
在画布中使用 moveTo(x, y) 方法来定义初始位置,其中 x 和 y 表示水平坐标轴和垂直坐标轴的位置,中间用 ,
隔开。x 和 y 的取值为数字,表示像素值(单位省略)。
设置初始位置的示例代码如下所示:
context.moveTo(x, y);
连线端点:在画布中使用 lineTo(x, y) 方法来定义连线端点。和初始位置类似,连线端点也需要定义 x 和 y 的坐标位置。
定义连线端点的代码如下所示:
context.lineTo(x, y);
描边:通过初始位置和连线端点可以绘制一条线,但这条线并不能被看到。这时我们需要为线添加描边,让线变得可见。
使用画布中的 stroke() 方法,可以实现线的可视效果。
设置描边的代码如下所示:
context.stroke();
2.3 设置线条的样式
context.lineWidth=5;//设置线的宽度
context.strokeStyle="red";//设置线的颜色
context.lineCap="round";//设置圆形端点
context.fillStyle="pink";//设置背景颜色
除了执行 stroke() 方法根据路径进行描边,还可以使用 fill() 方法进行图形的填充,示例代码如下: context.fill();
2.4 设置线条的路径
路径的定义:路径是所有图形绘制的基础,通过初始位置和连线端点即可创建一条路径。
路径需要通过路径状态进行重置或闭合,来产生不同的路径样式。
路径的状态:
重置路径
闭合路径
重置路径的概念:
在同一画布中,即使我们添加再多的连线端点也只能有一条路径,如果想要开始新的路径就需要使用beginPath()方法,当出现beginPath()时即表示路径重新开始。
步骤二:重置路径
<script>
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
context.moveTo(10,10); // 定义初始位置
context.lineTo(300,10); // 定义链接端点
context.lineWidth=5; // 设置线的宽度
context.strokeStyle='red'; // 设置线的颜色
context.stroke(); // 描边
context.beginPath(); // 重置路径
context.moveTo(10,60); // 定义初始位置
context.lineTo(300,60); // 定义链接端点
context.lineWidth=10; // 设置线的宽度
context.strokeStyle='green'; // 设置线的颜色
context.stroke(); // 描边
</script>
闭合路径的概念:
闭合路径就是将我们绘制的开放路径进行封闭处理,多点的路径闭合后会形成特定的形状。在画布中使用closePath()方法闭合路径。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<canvas id="canvas" width="400" height="300">
您的浏览器不支持canvas标签,请更新浏览器
</canvas>
<script>
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
context.moveTo(10,10);
context.lineTo(10,100);
context.lineTo(100,100);
context.closePath(); // 闭合路径
context.stroke();
</script>
</body>
</html>
3 Canvas 常用方法
3.1 canvas 绘制矩形
绘制一个红色的矩形
设置 fillStyle 属性可以是 CSS 颜色、渐变或图案。fillStyle 默认设置是 #000000
(黑色)。
fillRect(x,y,width,height) 方法定义了矩形当前的填充方式。
3.2 canvas 绘制圆形
在canvas中绘制圆形,我们将使用以下方法:
arc(x, y, r, start, stop)
参数分别是:(圆心x坐标, 圆心y坐标, 半径r, 开始弧度, 结束弧度)。
结束弧度的计算公式:
角度 * Math.PI / 180
。
context.arc(100, 100, 50, 0, 360 * Math.PI / 180); // 绘制圆形
context.stroke(); // 描边
3.3 canvas 绘制椭圆
在 canvas 中绘制椭圆, 我们将使用以下方法:
ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)
参数分别是:(椭圆圆心x坐标, 椭圆圆心y坐标, 半径x, 半径y, 旋转的角度, 起始角, 结束角, 顺时针/逆时针)
绘制一个椭圆
context.ellipse(120, 100, 100, 50, 0, 0, 360 * Math.PI / 180); // 绘制椭圆
context.stroke(); // 描边
3.4 canvas 绘制文本
使用 canvas 绘制文本,重要的属性和方法如下:
font - 定义字体
fillText(text,x,y) - 在 canvas 上绘制实心的文本
strokeText(text,x,y) - 在 canvas 上绘制空心的文本
使用“Arial”字体在画布上绘制一个高 30px 的实心文字:
context.font = '30px Arial'; // 设置文本样式
context.fillText('Hello World', 10, 50); // 绘制实心文字
3.5 canvas 渐变
渐变可以填充到矩形、圆形、线条、文本等,各种形状可以自定义不同的颜色。
有两种方式来设置 Canvas 渐变:
createLinearGradient(x, y, x1, y1)
:创建线条渐变;createRadialGradient(x, y, r, x1, y1, r1)
:创建一个径向/圆渐变。
使用 createLinearGradient(),创建一个线性渐变。
当我们使用渐变对象,必须使用两种或两种以上的停止颜色。addColorStop() 方法指定停止颜色,位置可以是 0 至 1。
使用渐变,设置 fillStyle 或 strokeStyle 的值为渐变,然后绘制形状,如矩形、文本或一条线.
gradient.addColorStop(0, 'red'); // 设置渐变颜色(开始)
gradient.addColorStop(1, 'green'); // 设置渐变颜色(结束)
context.fillStyle = gradient; // 设置渐变填充样式
context.fillRect(10, 10, 200, 80); // 绘制矩形
4 SVG 简介
SVG 英文全称为 Scalable Vector Graphics,意思为可缩放的矢量图。
HTML5 支持内联 SVG。
HTML <svg>
元素是 SVG 图形的容器。
SVG 有多种绘制路径、框、圆、文本和图形图像的方法。
4.1 什么是SVG ?
SVG 指可伸缩矢量图形(Scalable Vector Graphics);
SVG 用于定义用于网络的基于矢量的图形;
SVG 使用 XML 格式定义图形;
SVG 图像在放大或改变尺寸的情况下其图形质量不会有损失;
SVG 是万维网联盟的标准。
4.2 SVG优势
与其他图像格式相比(比如 JPEG 和 GIF),使用 SVG 的优势在于:
SVG 图像可通过文本编辑器来创建和修改;
SVG 图像可被搜索、索引、脚本化或压缩;
SVG 是可伸缩的;
SVG 图像可在任何的分辨率下被高质量地打印;
SVG 可在图像质量不下降的情况下被放大。
4.3 SVG 与 Canvas 两者间的区别
SVG 是一种使用 XML 描述 2D 图形的语言。
Canvas 通过 JavaScript 来绘制 2D 图形。
SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的。您可以为某个元素附加 JavaScript 事件处理器。
在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形。
Canvas 是逐像素进行渲染的。在 Canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。
5 使用 SVG 绘制基本图形
5.1 绘制矩形
使用 rect 标签,主要属性:
x/y:绘图位置,
width/height:矩形长宽,
fill:填充颜色,默认黑色,
stroke:描边的颜色。
stroke-width:描边的宽度。
rx/ry:描边的圆角。
5.2 绘制圆和椭圆
5.2.1 绘制圆
方法一:使用矩形绘制。
示例代码:
<svg width="500" height="500"><rect x="100" y="10" width="100" height="100" rx="50"></rect> </svg>
方法二:
使用专门的标签绘制,主要属性:
cx/cy:圆绘制的位置,圆心位置。
r:圆的半径。
5.2.2 绘制椭圆
5.3 绘制直线、折线、多边形
5.3.1 绘制直线
5.3.2 绘制折线
5.3.3 绘制多边形
- Canvas 简介- 使用 Canvas 绘制图形- Canvas 常用方法- SVG 简介- 使用 SVG 绘制基本图形相关推荐
- H5画布 canvas(一)canvas简介、绘制圆形矩形、案例饼状图绘制
目录 1. canvas 简介 2. canvas 标签介绍 3. canvas 上下文 Context 4. 案例:在 canvas 画布中绘制表格 5. canvas 的 beginPath 状态 ...
- H5画布 canvas(一)canvas简介、绘制圆形/矩形、案例饼状图绘制
目录 1. canvas 简介 2. canvas 标签介绍 3. canvas 上下文 Context 4. 案例:在 canvas 画布中绘制表格 5. canvas 的 beginPath 状态 ...
- HTML5 canvas 实现回合制战棋游戏(1):加载和绘制图形
HTML5 canvas 实现回合制战棋游戏(1):加载和绘制图形 游戏介绍 完整代码 代码目录 游戏运行 HTML5 canvas 绘制图形 canvas 介绍 绘制函数 加载图片 生物行走动画绘制 ...
- 绘制变形图形--Canvas的基本操作
1.坐标的变换 对坐标的变换处理,有如下三种方式. 平移 移动图形的绘制主要是通过translate 方法来实现的,该方法定义如下所示. context. translate(x, y); trans ...
- html5游戏制作raf,HTML5之弧度角度与sincos(五角星绘制)、Canvas图形组合、阴影、图像绘制及createJS应用...
弧度与sin及cos的关系 目的: 通过理解弧度与sin及cos的关系,可以根据弧度及半径求出旋转指定弧度后所到达的dx,dy坐标 弧度(angle)与角度(degree)的关系: 360角度 = 2 ...
- HTML5利用Canvas绘制图形(Canvas基本知识、绘制矩形、使用路径和图形组合)
绘制图形有很多方法,可以借助Flash实现,也可以使用SVG和VML来绘图.本次将要学习一种新的灰土方法--使用Canvas元素,它是基于HTML5原生的绘图功能.使用Canvas元素,可以绘制图形, ...
- 精通Android自定义View(十)绘制篇Canvas分析之绘制Path
1 Path常用方法简析 Path在2D绘图中是一个很重要的类. Path在这里可以绘制基本的图形,也可以绘制其他复杂的图形. 2 常用API解析与示例 2.1 xxxTo方法 Path类中提供了一套 ...
- 前端实现可绘制的canvas画布_前端图形学基础(五)——Canvas状态管理
点击右上角的关注,不定期前端干货分享!! 欢迎来到我的前端图形学系列文章: 前端图形学基础(一)--Canvas基础入门 前端图形学基础(二)--Canvas基础 前端图形学基础(三)--Canvas ...
- 精通Android自定义View(十一)绘制篇Canvas分析之裁剪
clipRect(int left, int top, int right, int bottom) 这个方法作用就是裁切一个矩形出来,但是图形不还是在canvas上面的,所以本质上还是裁切的can ...
最新文章
- 51CTO完成B轮融资,围绕1400万社区用户的IT学习平台要怎么做?
- NSIS 刷新ICO缓存
- 不唐突的JavaScript的七条准则
- BZOJ 1609 Usaco Eating Together
- HDU 6264 Super-palindrome
- ios framework 找不到.h_找不到好看的壁纸?上万张「高清壁纸」,都在iOS捷径里...
- 塑云科技基于 KafKa+OTS+MaxCompute 完成物联网系统技术重构
- ECCV 2020 Oral | BorderDet : 用边界特征做检测
- AI大一统:阿里达摩院发布多任务、多模态统一模型OFA
- 【C】动态申请二维数组
- 计算机视觉算法_RANSAC 估计
- 学习一下物联网协议 wifi zigbee 蓝牙等等----从wifi就开始 wifi和wifi协议 关于wifi协议本身我们需要了解那些东西?
- 使用海康8700综合平台对ds-6908解码器进行解码上墙大概配置
- 领域驱动设计思维导图
- 使用PS软件修改图片的尺寸
- Unity绿幕视频后期制作方案探索
- VUE+Canvas实现雷霆战机打字类小游戏
- 详细指南!手把手教你上手Tableau软件!
- 裸辞后进入华为,拿下34K测试岗offer....
- matlab做胶州湾地图,惊了,青岛也有了五环地图,快来看你家在几环?