Canvas 是H5的一部分,允许脚本语言动态渲染图像。Canvas 定义一个区域,可以由html属性定义该区域的宽高,javascript代码可以访问该区域,通过一整套完整的绘图功能(API),在网页上渲染动态效果图。

二、Canvas 能做什么

游戏:毫无疑问,游戏在HTML5领域具有举足轻重的地位。HTML5在基于Web的图像显示方面比Flash更加立体、更加精巧。

图表制作:图表制作时常被人们忽略,但无论企业内部还是企业间交流合作都离不开图表。现在一些开发者使用HTML/CSS完成图标制作。当然,使用SVG(可缩放矢量图形)来完成图表制作也是非常好的方法。

字体设计:对于字体的自定义渲染将完全可以基于Web,使用HTML5技术进行实现。

图形编辑器:图形编辑器能够100%基于Web实现。

其他可嵌入网站的内容:类似图表、音频、视频,还有许多元素能够更好地与Web融合,并且不需要任何插件。

三、Canvas基本用法

1.使用<canvas>必须先设置其width和height属性,指定可绘图区域大小,只指定宽高不添加样式或者绘制图像的话,在页面中将看不到该元素。

 <canvas id='draw' width='200px' height='200px'></canvas>

2 .绘制图像的话,我们首先要取到canvas并调用getContext()方法,然后传入上下文名字(2D/3D),2D有两种基本绘图操作|填充(fillStyle)|描边(strokeStyle)|,这两个属性默认值为#000

 var draw = document.getElementById('draw');
//确认浏览器是否支持<canvas>元素
if(draw.getContext){
var context = draw.getContext('2d');
//给context绘制红色的边框
context.strokeStyle = '#f00';
//内部填充大草原的颜色
context.fillStyle = '#0f0';
}

3 .使用toDataURL()方法,可以导出<canvas>元素上绘制的图像

 var draw = document.getElementById('draw');
if(draw.getContext){
//显示图像,toDataURL()获取到的是一串base64的字符串
var drawURL = draw.toDataURL('image/png');
var image = document.createElement('img');
image.src = drawURL;
document.body.appendChild(image);
}

4 .绘制矩形,主要有三个方法,fillRect()为矩形填充颜色、strokeRect()为矩形描边、clearRect()清除矩形。这三个方法都接收4个参数x/y/w/h,矩形的左上角坐标和宽高

 var draw = document.getElementById('draw');
//确认浏览器是否支持<canvas>元素
if(draw.getContext){
var context = draw.getContext('2d'); //绘制红色矩形,绿色描边
context.fillStyle = '#f00';
context.strokeStyle = '#0f0';
context.strokeRect(,,,);
context.fillRect(,,,); //绘制绿色矩形,红色描边
context.fillStyle = '#0f0';
context.strokeStyle = '#f00';
context.strokeRect(,,,);
context.fillRect(,,,); //在两个矩形重叠的地方清除一个小矩形
context.clearRect(,,,);
}

5 .绘制路径,通过路径可以创造出复杂的形状和线条,要绘制路径,首先要调用beginPath()方法,再通过以下方法来实际的绘制路径

 arc(x,y,radius,startAngle,endAngle,conterclockwise)
(x,y)圆心坐标、radius半径、(startAngle,endAngle)起始角度和终止角度、conterclockwise顺时针(false)/逆时针(true) moveTo(x,y) 将游标移动到(x,y),不画线。可以用来修改所谓的上一点坐标* arcTo(x1,y1,x2,y2,radius)
从上一点开始绘制一条曲线到(x2,y2),并且以给定的radius穿过(x1,y1) lineTo(x,y) 从上一点开始绘制一条直线,到(x,y) rect(x,y,width,height)
从(x,y)开始绘制一个矩形,宽高为width、height。这个方法绘制的是矩形路径,而非strokeRect()和fillRect()所绘制的独立的形状 //接下来绘制一个不带数字的时钟
var draw = document.getElementById('draw');
if(draw.getContext){
var context = draw.getContext('2d');
//开始路径
context.beginPath();
//绘制外圆
context.arc(,,,,*Math.PI,false);
//绘制内圆
context.moveTo(,);
context.arc(,,,,*Math.PI,false);
//绘制分针
context.moveTo(,);
context.lineTo(,);
//绘制时针
context.moveTo(,);
context.lineTo(,);
//描边路径
context.stroke();
context.strokeStyle = '#f00';
}

6 . 绘制文本,主要有两个方法,fillText(),strokeText(),都接收四个参数|text(要绘制的文本)|x|y|最大像素宽度(可选)|,这两个方法都已下列三个属性为基础

 font文字样式,大小,字体等
textAlign 文本对其方式|start|end|left|right|center|
textBaseline 文本的基线|top|hanging|middle|alphabetic|ideographic|bottom|
 //在表盘绘制12点
context.font = 'bold 12px Arial';
context.textAlign = 'center';
context.textBaseline = 'middle';
context.fillText('',,);

7 . 变换

  rotate(angel) 围绕原点旋转图像angle弧度
scale(scaleX,scaleY) 缩放图像,x*scaleX,y*scaleY 默认1
translate(x,y) 将坐标原点移动到(x,y) var draw = document.getElementById('draw');
if(draw.getContext){
var context = draw.getContext('2d');
//开始路径
context.beginPath();
//绘制外圆
context.arc(,,,,*Math.PI,false);
//绘制内圆
context.moveTo(,);
context.arc(,,,,*Math.PI,false);
//变换原点
context.translate(,);
//旋转表针
context.rotate()
//绘制分针
context.moveTo(,);
context.lineTo(,-);
//绘制时针
context.moveTo(,);
context.lineTo(-,);
//描边路径
context.stroke();
context.strokeStyle = '#f00';
}

8 . 绘制图像,drawImage()

  var img = document.getElementByTagNames('image')[];
context.drawImage(img,,,,,,,,);
9个参数: 要绘制的图像 原图像|x|y|w|h| 目标图像|x|y|w|h|

9 . 阴影和渐变

 阴影主要是以下几个属性值
shadowColor
shadowOffsetX : X轴阴影偏移量
shadowOffsetY : Y轴阴影偏移量
shadowBlur : 模糊像素数,默认0,不模糊 var context = draw.getContext('2d');
//设置阴影
context.shadowColor = 'rgba(210,210,210,.5)';
context.shadowOffersetX = ''; 渐变 创建一个新的线性渐变 createLinearGradient()方法,有四个参数|x1|y1|x2|y2|分别为起点的坐标和终点的坐标
var gradient = context.createLinearGradient(,,,);
gradient.addColorStop(,'#fff'); //0表示开始
gradient.addColorStop(,'#000'); //1表示结束
//使用定义好的渐变属性
context.fillStyle = gradient; //填充的时候放入渐变
context.fillRect(,,,);


 创建一个放射渐变 createRadialGradient(),六个参数|x1|y2|radius1|x2|y2|radius2|分别为第一个圆心和半径第二个圆心和半径,用法和线性渐变相同

10 . 使用图像数据,可以通过getImageData()取得原始图像数据。四个参数|x|y|w|h|。每个ImageData对象有三个属性,width/height/data,data是一个数组,内部存着每一个像素的数据,每个元素的值介于0-255之间

 
  var imgdata = context.getImageData(,,,);
var data = imgdata.data,
red = data[],
green = data[],
blue = data[],
alpha = data[]; //实现一个灰色过滤器
var draw = document.getElementById('draw');
if(draw.getContext){
var context = draw.getContext('2d');
var img = document.getElementsByTagName('image')[],
imageData,data,
i,len,average,
red,green,blue,alpha;
//绘制原始图像
context.drawImage(img,,,,);
//获取图像数据
imageData = context.getImageData(,,img.width,img.height);
data = imageData.data;
for(i=,len=data.length;i<len;i+=){
red = data[i];
green = data[i+];
blue = data[i+];
alpha = data[i+];
//计算rgb的平均值
average = Math.floor((red+green+blue)/);
//设置颜色值
data[i] = average;
data[i+] = average;
data[i+] = average;
}
imageData.data = data;
//把数据绘制在画布
context.putImageData(imageData,,)
}

HTML5 Canvas绘图基本使用方法, H5使用Canvas绘图的更多相关文章

  1. html5不能播放视频的方法

    html5不能播放视频的方法H5不能播放视频的方法 格式工厂转换成 AVC 注意音频流 采样率和比特率 设置低一点 不然播放会卡住 还有点击播放必须要click 不要用touchstart没效果的

  2. HTML5 canvas绘图基本使用方法

    <canvas></canvas>是HTML5中新增的标签,用于绘制图形,实际上,这个标签和其他的标签一样,其特殊之处在于该标签可以获取一个CanvasRenderingCon ...

  3. H5使用Canvas绘图

    一.什么是Canvas Canvas 是H5的一部分,允许脚本语言动态渲染图像.Canvas 定义一个区域,可以由html属性定义该区域的宽高,javascript代码可以访问该区域,通过一整套完整的 ...

  4. html5标签canvas函数drawImage使用方法

    html5中标签canvas,函数drawImage(): 使用drawImage()方法绘制图像.绘图环境提供了该方法的三个不同版本.参数传递三种形式: drawImage(image,x,y):在 ...

  5. H5的canvas绘图技术

    canvas元素是HTML5中新添加的一个元素,该元素是HTML5中的一个亮点.Canvas元素就像一块画布,通过该元素自带的API结合JavaScript代码可以绘制各种图形和图像以及动画效果. 1 ...

  6. HTML5 canvas中的路径方法

    路径方法 fill()                                填充当前绘图(路径) stroke()                        绘制已定义的路径 begin ...

  7. [js高手之路] html5 canvas系列教程 - 认识canvas以及基本使用方法

    canvas是html5中引入的一个新元素,俗称画布,既然是画布,当然是用来画图的.canvas技术指的是利用javascript操作canvas元素绘制图形的技术,要使用canvas,一定要浏览器支 ...

  8. H5标签-canvas实现颜色拾取功能

    HTML5 <canvas> 标签是用于绘制图像,不过,<canvas> 元素本身并没有绘制能力(它仅仅是图形的容器),必须使用脚本(通常是 JS)来完成实际的绘图任务. &l ...

  9. H5之canvas简单入门

    <canvas></canvas>是html5出现的新标签,像所有的dom对象一样它有自己本身的属性.方法和事件,其中就有绘图的方法,js能够调用它来进行绘图 <canv ...

随机推荐

  1. Linux网络命令详解

    命令write,功能是给指定用户发信息(接收信息的用户要处于登录状态,相当于QQ的私聊),例如:用户xbb给用户liuyifei发消息:I want to eat together!(发送消息以CRT ...

  2. PAT 德才论

    宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人 ...

  3. Burpsuite intruder模块 越过token进行爆破,包含靶场搭建

    安装靶场 链接:https://pan.baidu.com/s/19X0oC63oO2cQKK6UL5xgOw 提取码:yq7f 下载完成放入网站根目录 点击初始化安装 出现错误,进行跟踪 发现是数据 ...

  4. 全网最全95道MongoDB面试题1万字详细解析

    1.mongodb是什么? MongoDB 是由 C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在给 WEB ...

  5. sql 获取当前时间的前一天,不加时分秒

    select convert(datetime,convert(char(20),dateadd(day,-1,getdate()),102)) -1 为减去天数 getdate 为 获取当前时间

  6. 前端JS的服务订阅&服务发布

    var eventCenter = { sub:function(mesName, mesCallback){ this.argus=this.argus||{}; this.argus[mesNam ...

  7. [noi.ac省选模拟赛20200606]赌怪

    题目   点这里看题目. 分析   先特判掉\(K=2\)的情况.   首先可以考虑到一个简单 DP :   \(f(i)\):前\(i\)张牌的最大贡献.   转移可以\(O(n^2)\)地枚举区间 ...

  8. Unit2-窝窝牌电梯

    全文共2329字,推荐阅读时间10~15分钟. 文章共分四个部分: 作业分析 评测相关 重构策略 课程体验感受 作业分析 Unit2要求我们模拟现实生活中的电梯调度情景,迭代路径是单电梯->多电 ...

  9. 从零开始的Spring Boot(2、在Spring Boot中整合Servlet、Filter、Listener的方式)

    在Spring Boot中整合Servlet.Filter.Listener的方式 写在前面 从零开始的Spring Boot(1.搭建一个Spring Boot项目Hello World):http ...

  10. 从零开始的Spring Boot(6、Thymeleaf内置对象及表达式大全)

    1.1 基础对象 #ctx:上下文对象 ${#ctx.locale} ${#ctx.variableNames} ${#ctx.request} ${#ctx.response} ${#ctx.ses ...