浅学CANVAS

之前在学习H5的时候就有遇到<canvas>那时候太天真的了,以为不会遇到需要用到的canvas的需求,就直接跳过这个技术点,没想到啊,上手项目没多久就遇到了,需求是用canvas画一张宣传海报,幸好通过后端的插件库来完成,不然就拖累项目进度了,所以就抱着亡羊补牢的心态学习canvas。

1.什么是CANVAS?

          顾名思义,翻译过来就是画布;油画的意思。canvas提供了一块空白的矩形图形区域,我们可以使用特定的JavaScript API 来绘画图形。

 Canvas优点:提供的功能原始,适合像素处理,动态渲染和大数据量绘制。

2<canvas>的来历

          据百度,<canvas> 标记由 Apple 在 Safari 1.3 Web 浏览器中引入。对 HTML 的这一根本扩展的原因在于,HTML 在 Safari 中的绘图能力也为 Mac OS X 桌面的 Dashboard 组件所使用,并且 Apple 希望有一种方式在 Dashboard 中支持脚本化的图形。

Firefox 1.5 和 Opera 9 都跟随了 Safari 的引领。这两个浏览器都支持 <canvas> 标记。

我们甚至可以在 IE 中使用 <canvas> 标记,并在 IE 的 VML 支持的基础上用开源的 JavaScript 代码(由 Google 发起)来构建兼容性的画布。

目前 <canvas> 已经成为 HTML 5 草案中一个正式的标签。

 3.canvas的特点

(计算机可以使用两种方式来显示图像:1.点阵文件:又名:取样图像、点阵图像、位图图像。点阵文件缩放会失真,保存起来占用空间比较大;2.矢量文件:使用数学方程,形状参数等。矢量文件中的图形元素称为对象)

canvas绘画是z轴从下到上重重叠加的(不是我之前以为的y轴从上到下,画动画的时候经常会用到的)

canvas 元素用于在网页上绘制图形。HTML5 的 canvas 元素使用 JavaScript 在网页上绘制2D图像。在矩形区域的画布上,控制其每一像素,JavaScript 来绘制 2D图形,逐像素进行渲染。可以通过多种方法使用canvas 元素绘制路径、矩形、圆形、字符以及添加图像。

4.怎么使用canvas

1.向 HTML5 页面添加 canvas元素,并规定元素的 id、宽度和高度

<canvas id="myCanvas" width="200" height="100"> IE9及其以上版本的浏览器,才支持canvas标签 提示:您的浏览器不支持canvas,请升级浏览器</canvas>。

这时候,<canvas>可以使用css来添加如背景颜色,边框及边框颜色。

#myCanvas{bgc:#red,borader:1rpx soild #pink}

但是不能在css里面添加width和height属性,canvas画布的默认大小是300*150,当在css设置画布大小时比如300*300实际是将原画布(300*150)进行了拉伸,所以会导致图像变形。所以<canvas>自带有width和height两个属性,也只有这两个属性。

2.在javascript中获取<canvas>元素

/ 获取画布元素
let canvas = document.getElementById("square");
// 获取绘制2D元素上下文
let context = canvas.getContext("2d");

3.使用上下文API绘图

 1.canvas中的坐标系

  • canvas坐标系,从最左上角0,0开始。x向右增大, y向下增大
    • 联想:CSS中的盒模型

2.API

图形属性:
fillStyle:填充颜色。
font:绘制文本的时候css字体
globalAlpha:绘制像素时添加的透明度
gloablCompositeOperation:合并新的像素点和下面的像素点
lineCap:渲染线段的末端
lineJoin:渲染顶点
lineWidth:边框的宽度
miterLimit:斜接顶点的最大长度
textAlign:文本水平对齐方式
textBaseline:文本垂直对齐方式
shadowBlur:阴影清晰度或模糊程度
shadowColor:下拉阴影的颜色
shadowOffsetX:阴影的水平偏移量
shadowOffsetY:阴影垂直偏移量
strokeStyle:边框线颜色

图形方法:

fillRect(): x坐标 y坐标 宽度 高度 (绘制矩形)

arc(): x坐标 y坐标 r半径 起始角 结束角 设置顺时针(false)还是逆时针(true)(圆形)

fill():填充路径

fillRect(): x y 宽度 高度

beginPath():新路径

moveTo():新的子路径 有x,y轴

clineTo():该点与新点通过直线连接 有x,y轴

stroke():绘制边框线

arcTo():绘制一条直线与一段圆弧 弧的起始坐标x 弧的起点坐标y 弧的结束坐标x 弧的结束坐标y 弧的半径r

bezierCurveTo():当前子路径添加一个新点,利用三次贝塞尔曲线相连。

quadrticCurveTo():与上面类似,只不过它使用二次贝塞尔曲线。

closePath():边框线闭合

clearRect():与fillRect()类似 不过它会忽略当前填充样式,采用透明的黑色像素

rect():用于绘制矩形,会对当前路径产生影响,它会将指定的矩形添加到当前路径的子路径中。

createPattern():第一参数指定了用做图案的图片,必须是文档中的一个img、canvas或video元素。第二参数通常是repeat,表示采用重复的图片填充。还可以使用repeat-x、repeat-y、no-repeat。

createRadialGradient():用来创建放射状、圆形渐变对象。
参数为:渐变开始圆的x坐标、y坐标、半径、结束x坐标、结束y坐标、结束半径r

createLinearGradient():用来创建线性渐变。
参数为:渐变开始的x坐标,y坐标,结束x左边,结束y坐标

addColorStop():定义渐变的颜色。
参数:介于 0.0 与 1.0 之间的值,表示渐变中开始与结束之间的位置。二参数是css颜色

fillText():用于给画布添加文本。参数:text、文本x坐标、y、允许文本最大宽度

strokeText():也是添加文本,不过无填充。参数:同上。

clip():定义一个裁剪区域,定义了之后,该区域不会绘制任何内容。

save():此方法将当前状态推送到堆栈上。

restore():此方法弹出堆栈上的顶级状态,将上下文恢复到该状态。

setTransform():直接设置画布的变换矩阵。
参数:水平旋转、水平倾斜、垂直倾斜、垂直缩放、水平移动,垂直移动。

translate():将坐标原点进行上下左右移动。
参数:添加到水平坐标x上的值,添加到垂直坐标y上的值

scale():实现对x、y轴上的距离进行延长和缩短。
参数:缩放当前绘图的宽度(1=100%,0.5=50%…)、也是缩放的高度

drawImage():用于将源图片的像素内容复制到画布上,还可以对图片进行缩放旋转。
参数:规定的(图片,画布,视频)、开始剪切的x坐标、y坐标、被剪切的宽度、高度、
在画布上放置图形的x坐标、y坐标、要使用图像的宽度、高度。

toDataURL():方法将画布中内容抽取成一张图片,PNG图片形式返回。同时编码成一个字符串数据,可以在img上使用。

getImageData():复制画布上执行矩形的像素数据。
参数:开始复制的x坐标,y坐标、复制矩形区域的宽度、高度。

putImageData():拿到复制的像素,且将数据放回画布。
参数:要回放的数据、画布的x坐标,y坐标、水平值x,水平值y、在画布上绘制图像所使用的宽度、高度。

// 检测
isPointInPath():指定的点是否在当前路径中,返回true表示在当前路径,反之false。

使用:
注意绘制的顺序,否则不会生效。
画布的默认坐标系统是以画布最左上角为原点。

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值