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. java实现第四届蓝桥杯幸运数

    幸运数 题目描述 幸运数是波兰数学家乌拉姆命名的.它采用与生成素数类似的"筛法"生成. 首先从1开始写出自然数1,2,3,4,5,6,- 1 就是第一个幸运数. 我们从2这个数开始 ...

  2. 【Vue】axios封装,更好的管理api接口和使用

    在现在的前端开发中,前后端分离开发比较主流,所以在封装方法和模块化上也是非常需要掌握的一门技巧.而axios的封装也是非常的多,下面的封装其实跟百度上搜出来的axios封装或者axios二次封装区别不 ...

  3. Spring源码之自动装配

    我们使用Spring开发过程中经常会用到Autowired注解注入依赖的bean,这部分也是面试的热点问题之一.今天咱们一起来深入研究下自动注入的背后实现原理.首先上一个例子,如下所示: @RestC ...

  4. 组态与非组态结合的LT

    概述 最新的应用软件快速搭建平台现已投入使用.首先对名称进行规范统一一下. 英文全称:LARKIN-CN.TOP : 中文全称:拉图: 简称:LT. 特点: 组态软件开发的快速.灵活 C端软件的控件交 ...

  5. 1.Go 开始搞起

    link 1. IDE Go Land 服务器激活 2. 资源 中文网站 翻译组 翻译组wiki 待认领文章 入门指南 中文文档 fork 更新 github 中如何定期使用项目仓库内容更新自己 fo ...

  6. apt update 提示 Release file for http://… is not valid yet (invalid for another d..)

    由于在公司里需要使用代理上网,搞了好久,好不容易把 apt 整得可以访问外网了,结果在执行 spt update 时总是提示 Release file for http://- is not vali ...

  7. [每日一题2020.06.13]leetcode #739 #15 单调栈 双指针查找

    739 每日温度 ( 单调栈 ) 题目 : https://leetcode-cn.com/problems/daily-temperatures/ 题意 : 找到数组每一个元素之后第一个大于它的元素 ...

  8. (二)JavaMail创建包含内嵌图片的邮件

    链接:https://blog.csdn.net/qq_41151659/article/details/96475739 代码如下: import com.sun.mail.util.MailSSL ...

  9. pip安装报错: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProxyError('Cannot connect to proxy

    pip安装报错 解决办法: pip install selenium -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

  10. 技术周刊 · Lighthouse 测试报告生成

    登高远眺 天高地迥,觉宇宙之无穷 基础技术 Lighthouse 测试内幕 文章分享了网易云音乐前端性能监控平台使用 Lighthouse 的实践经验,介绍了 Lighthouse 的测试流程.内部模 ...