javascript:使用canvas绘图2D图形
HTML5最少欢迎的一个新功能就是canvas元素,这个元素负责在页面中设定一个区域,然后就可以使用javascript进行动态的绘图。
- 基本用法
<canvas id="drawing" widht="200" height="300"> a drawing of somethind </canvas>
设定了画布后,要去的绘图上下文,通过get.Context("2d")方法
var drawing = document.getElementById("drawing"); if(drawing.getContext){ var context = drawing.getContext("2d"); }
使用toDataURL(),参数为图像的MIME类型格式,如toDataURL("image/png")
var drawing = document.getElementById("drawing"); if(drawing.getContext){ var context = drawing.getContext("2d"); var imgURI = context.toDataURL("image/png"); var image = document.createElement("img"); image.src = img; documemt.body.appendChild(image); }
- 2D上下文
2D上下文的坐标开始与canvas元素的左上角。使用2D上下文可以绘制矩形、弧形和路径。2D上下文两个基本操作就是填充和描边,属性fillStyle()实现填充效果,属性strokeStyle()实现描边效果,这两个方法的参数为表示颜色的字符串、渐变对象、模式对象。
1)绘制矩形
对于绘制矩形有三种方法:fillRect() , strokeRect() , clearRect()。这三个方法都接受四个参数,x坐标,y坐标,width,height。
fillRect()的填充颜色由filleStyle()方法指定,同理stokeRect()由strokeStyle()指定。
描边线条的宽度有lineWidth()指定,lineCap指定线条末端是平头(butt)、圆头(round)还是方头(square),lineJoin()控制线条相交的方式(圆交round,斜交bevel,斜接miter)
clearRect()用于清理画布上得指定区域。
context.fillRect(10,10,50,50); context.fillStyle("red"); context.stokeRect(20,20,50,50); context.strokeStyle("green"); context.lineWidth(5); context.lineCap('round'); context.lineJoin("round");
2) 绘制路径
绘制路径首先调用beginPath(),表示要绘制新的路径。然后调用下面的方法绘制实际的路径。
1)绘制弧线 arc(x,y,radius,staryAngle,endAngle,counterClockWise) --- 以(x,y)为圆心,半径为radius,开始角度为startangle,结束角度为endangle,counterClockWise值为false表示按顺时针计算。
2)从上一点开始绘制弧线 arcTo(x1,y1,x2,y2,radius),以x2,y2为终点,通过x1,y1
3) 从上一个点绘制曲线 bezierCurveTo(c1x,c1y,c2x,c2y,x,y) ,从上一点开始绘制曲线,终点为x,y,以(c1x,c1y)( c2x,c2y)为控制点
4)从上一点开始绘制一条直线 lineTo(x,y)
5) moveTo(x,y) 绘制图表移动到x,y点
6) quadraticCurveTo(cx,cy,x,y) 绘制二次曲线,终点为x,y,cx,cy为控制点
7)rect(x,y,widht,height) 绘制矩形路径
创建路径后,调用closePath()绘制连接到起点的路径,调用fill()填充路径,调用stroke()创建描边路径。
以下代码绘制了时钟:
//外圆 context.arc(100,100,99,0,2*Math.PI,false); //内圆 context.arc(100,100,94,0,2*Math.PI,false); context.moveTo(100,100); context.lineTo(100,15);context.moveTo(100,100); context.lineTo(100,30);//描边路径 context.storke();
3)绘制文本
绘制文本主要由两个方法:fillText(),stokeText(),接收四个参数:文本字符串,x坐标,y坐标,可选的最大宽度。
这两个方法以下面的属性为基础:font, textAlign , textBaseline
textAlign的值有start end center,控制水平对齐方式 , textBaseline的值有middle,top,bottom,控制垂直对齐方式。
辅助测量文本所占的宽度方法meatureText(文本字符串),返回的对象只有一个width属性,这个方法是以设置的font,textAlign,textBaseline属性来测量文本可宽度。
var fontsize = 140px; context.font = fontsize + " italic Arial"; context.textAlig = center; context.textBaseline = "top"; while(context.meatureText("hello").width > 140){ fontsize -- ; context.font = fontsize + " italic Arial"; } context.fillStyle("red"); context.fillText("hello",10,10);
4)变换
修改变化矩阵的方法:
rotate(angle):围绕原点旋转angle角
scale(scaleX,scaleY) : 缩放图像,在x方向乘以scaleX,在y方向乘以scaleY
translate(x,y) : 将坐标原点移动到(x,y)点
transform(m1_1,m2_1,m2_1,m2_2,dx,dy) : 直接修改变换矩阵
setTransforn(m1_1,m2_1,m2_1,m2_2,dx,dy) : 将变换矩阵重置为默认状态,在调用transform方法
通过context.save()可以将设置保存下来,再通过context.restore(),从当前设置一级一级向上得到之前的设置
5)绘制图像
通过方法drawImage()绘制图像,不同的实现效果这个方法需要传入的参数不同。
最简单的参数是,html的image元素,绘制区域起点x坐标,y坐标
var img = document.images[0]; context.drawImage(img,10,10);
绘制图像的一部分到画布中:
参数为:image元素,源图像的坐标起点x值,y值,width,height,目标图像的x值,y值,width,height.
将一个canvas元素绘制到另一个画布中
6)阴影
shadowColor = 颜色值
shadowOffsetX = X方向的偏移量
shadowOffsetY = Y方向的偏移量
shadowBlur = 模糊值
7)渐变
- 线性渐变
调用createLinearGradient(起点x坐标,起点y坐标,终点的x坐标,终点的y坐标),返回canvasGradient渐变对象。创建渐变对象后调用addColorStop(色标的位置,css颜色值),色标的位置从0到1,0代表开始的颜色,1代表结束的颜色,把这个方法返回的渐变对象赋给fillStyle或者storkeStyle(),就可以使用渐变来绘制形状或者描边。
var gradient = context.createLinearGradient(30,30,70,70); gradient.addColorStop(0,''white"); gradient.addColorStop(1,"blue")context.fillStyle = gradient; context.fillRect(30,30,40,40);
- 径向渐变
方法类似线性渐变,context.createRadialGradient(起点圆的x坐标,y左边,半径,终点圆的x坐标,y坐标,半径)
8)使用模式
模式其实是重复的图像,调用方法createPattern(image元素,css的background-repeat值),将返回对象赋给fillstyle()
var img = document.images[0]; var pattern = context.createPattern(img,"repeat"); context.fillStyle = pattern; context.fillRect(30,30,100,100);
createPattern的第一个参数也可以是video对象或者canvas对象
9)获得图像数据
调用方法getImageData(获得的图像区域的x坐标,y坐标,width,height) , 返回imageData对象,这个对象有三个属性:width,height,data . 其中data属性存储这图像中每一个像素的值,每个像素又保存着rgba四个元素值。
var data = context.getImageData(0,0,image.width,image.height);
red = data[0]
gree = data[1]
blue = data[2]
alpha = data[3]
10) 合成
两个属性:globalAlpha = 0到1之间的值 , globalCompositionOperation = 指定的字符串值。
globalAlpha设置所有绘制区域的透明度
globalCompositionOperation指定先绘制的图形与后绘制的图形如何重叠。
转载于:https://www.cnblogs.com/lingLongBaby/p/8608946.html
javascript:使用canvas绘图2D图形相关推荐
- JavaScript 使用Canvas绘图
JavaScript 使用Canvas绘图 <canvas>元素负责在页面中设定一个区域,可以通过JavaScript动态地在这区域中绘制图形. 一.基本用法 1.先设置width和he ...
- 每天一个JavaScript实例-canvas绘图
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 【JavaScript】Canvas绘图整理
文章目录 绘制矩形 点线模式 绘制艺术字 绘制圆形路径 绘制圆角矩形 绘制凹多边形 绘制曲线 绘制位图 绘制坐标变换 绘制坐标变换与路径结合 绘制矩阵变换 绘制叠加效果 绘制线性渐变和径向渐变 位图填 ...
- 【JavaScript】Canvas绘制美丽的网螺旋旋转图形
<!DOCTYPE html> <html> <head><meta http-equiv = "content-type" conten ...
- 【HTML5】在canvas上绘制简单的2D图形 (+太极图)
canvas(画布) canvas 元素是H5中新增的一个重要元素,专门用来绘制图形.在页面中放置一个canvas元素,就相当于在页面上放置一块画布,可以利用 canvas api 在其中进行图形的描 ...
- html5 2d绘图,HTML5 canvas绘图
简介 HTML5新增了canvas元素,我们可以利用canvas绘制各种图形文本图表等,熟悉使用canvas还可以写出各种多彩的特效. 只是声明一张画布,本身并没有绘图能力,我们需要利用JS来实现绘图 ...
- JavaScript:使用Canvas绘图
1.基本用法 要使用<canvas>元素,必须先设置其width和height属性,指定可以绘图的区域大小,出现在开始后结束标签中的内容是后备信息,如果浏览器不支持<canvas ...
- 【Qt】2D绘图之图形视图框架(一)
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 场景(Scene) 04. 视图(View) 05. 图形项 06. 附录 01. 概述 在前面讲的基本绘图中,我们可以自 ...
- 使用html画简单的图形,HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图...
HTML5火的正热,最近有个想法也是要用到HTML的相关功能,所以也要好好学习一把. 好好看了一下Canvas的功能,感觉HTML5在客户端交互的功能性越来越强了,今天看了一下Canvas绘图,下边是 ...
最新文章
- 2. Python3输入与输出
- Mockito框架实现学习之when(dummy)
- jQuery实现输入框聚焦,键盘上下键选择城市
- python查询手机号码归属地
- 西门子,欧姆龙,施耐德PLC通信电缆制作图
- [转]AVALONDOCK 2.0入门指南第一部分
- 将网页转换成pdf文档的方法
- bugku misc disordered_zip
- Java 岗史上最全八股文面试真题汇总,堪称 2022 年面试天花板
- 互联网之于人类社会进化的意义
- JS如何改变元素内容?
- 主分区、扩展分区、逻辑分区
- 店铺logo设计免费在线生成
- LocalDateTime用法
- Python urlparse总结
- DelayQueue,网吧记时
- openwrt fota
- linux 6.5 安装vnc,Linux_CentOS6.5安装vncserver实现图形化访问
- 振动位移传感器IEPE加速度3轴采集模块
- 密码学 | 维吉尼亚密码(Vigener)
热门文章
- linux ntfs 3g6,CentOS6挂载读写NTFS分区(ntfs-3g)
- 深度学习(四十三)条件变分自编码器概述
- 遥感、制图学中各种图的区别
- 余姚中考能用计算机吗,2018年余姚中考政策有大变化,2020年取消奖励加分项目...
- qt连接mysql数据库原理_Qt连接数据库的两种方法
- ElasticSearch5.4X 搜索引擎查询java工具类
- shell mysql awk_shell mysql 处理数据小结
- ResNet原理和实现
- cpout引脚是干什么的_FPGA中差分信号的定义和使用(一)
- teamviewer 可用设备上限_2020:抚州办公楼采暖设备种类齐全