HTML5 Canvas绘图基本使用方法, H5使用Canvas绘图
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绘图的更多相关文章
- html5不能播放视频的方法
html5不能播放视频的方法H5不能播放视频的方法 格式工厂转换成 AVC 注意音频流 采样率和比特率 设置低一点 不然播放会卡住 还有点击播放必须要click 不要用touchstart没效果的
- HTML5 canvas绘图基本使用方法
<canvas></canvas>是HTML5中新增的标签,用于绘制图形,实际上,这个标签和其他的标签一样,其特殊之处在于该标签可以获取一个CanvasRenderingCon ...
- H5使用Canvas绘图
一.什么是Canvas Canvas 是H5的一部分,允许脚本语言动态渲染图像.Canvas 定义一个区域,可以由html属性定义该区域的宽高,javascript代码可以访问该区域,通过一整套完整的 ...
- html5标签canvas函数drawImage使用方法
html5中标签canvas,函数drawImage(): 使用drawImage()方法绘制图像.绘图环境提供了该方法的三个不同版本.参数传递三种形式: drawImage(image,x,y):在 ...
- H5的canvas绘图技术
canvas元素是HTML5中新添加的一个元素,该元素是HTML5中的一个亮点.Canvas元素就像一块画布,通过该元素自带的API结合JavaScript代码可以绘制各种图形和图像以及动画效果. 1 ...
- HTML5 canvas中的路径方法
路径方法 fill() 填充当前绘图(路径) stroke() 绘制已定义的路径 begin ...
- [js高手之路] html5 canvas系列教程 - 认识canvas以及基本使用方法
canvas是html5中引入的一个新元素,俗称画布,既然是画布,当然是用来画图的.canvas技术指的是利用javascript操作canvas元素绘制图形的技术,要使用canvas,一定要浏览器支 ...
- H5标签-canvas实现颜色拾取功能
HTML5 <canvas> 标签是用于绘制图像,不过,<canvas> 元素本身并没有绘制能力(它仅仅是图形的容器),必须使用脚本(通常是 JS)来完成实际的绘图任务. &l ...
- H5之canvas简单入门
<canvas></canvas>是html5出现的新标签,像所有的dom对象一样它有自己本身的属性.方法和事件,其中就有绘图的方法,js能够调用它来进行绘图 <canv ...
随机推荐
- MAC抓包工具Charles安装及破解
参考资料:https://juejin.im/post/5c0a430f51882516207d205d 下载 Charles官网下载安装包,下载成功后根据指示安装即可 官网地址:http://www ...
- Oracle 11g RAC之HAIP相关问题总结
1 文档概要 2 禁用/启用HAIP 2.1 禁用/启用HAIP资源 2.2 修改ASM资源的依赖关系 3 修改cluster_interconnects参数 3.1 使用grid用户修改ASM实例的 ...
- Android中数据缓存的处理
为了避免重复操作数据库带来的性能问题,可以将数据库中的数据一次性读入到内存中,这样使得对数据查询的操作变得更加高效,但是这样会带来数据同步的问题,所以需要在每次操作完内存中的数据,同步去操作数据库中的 ...
- 微信小程序 简单获取屏幕视口高度
由于小程序的宽度是固定的 750rpx,我们可以先用wx.getSystemInfo 来获取可使用窗口的宽高(并非rpx),结合750rpx的宽度算出比例,再用比例来算出高度 let that = t ...
- Flask 的请求与响应
flask的请求与响应 from flask import Flask,request,make_response,render_template,redirect app = Flask(__nam ...
- 小菜成长之路,警惕沦为 API 调用侠
小菜(化名)在某互联网公司担任运维工程师,负责公司后台业务的运维保障工作.由于自己编程经验不多,平时有不少工作需要开发协助. 听说 Python 很火,能快速开发一些运维脚本,小菜也加入 Python ...
- 构建自己的jar包上传至Mvaen中央仓库和版本更新
构建自己的jar包上传至Mvaen中央仓库和版本更新 一直羡慕别人制造轮子,开源项目,供别人使用:我也想这样,可以自己才疏学浅,本次就将自己写小工具上传到Maven的中央仓库. 一步一步详细教程演示如 ...
- vue2.0 + Element UI + axios实现表格分页
注:本文分页组件用原生 html + css 实现,element-ui里有专门的分页组件可以不用自己写,详情见另一篇博客:https://www.cnblogs.com/zdd2017/p/1115 ...
- 解决:Error:java: 无效的源发行版: 12
一. spring cloud项目启动.遇到问题: 二. 解决,共两个地方. 第一个位置: Shift/Ctrl/Alt/S 快捷键一起按 Modules选择你的项目(以及父级项目,如果有的话)-&g ...
- nacos基础--客户端下载
对于nacos的作用,我在这里不在过多介绍,不知道的同学可以自行先了解,对于nacos,有官网进行介绍,对于一个初学者来说是一件非常方便的事情. 官网地址:https://nacos.io 但是在下载 ...