前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >canvas绘图基本使用方法(二)

canvas绘图基本使用方法(二)

作者头像
javascript艺术
发布2021-05-28 13:56:21
7560
发布2021-05-28 13:56:21
举报
文章被收录于专栏:javascript艺术javascript艺术

canvas绘图基本使用方法(二)

转载至博客http://blog.csdn.net/u014607184/article/details/51746384 诗渊

线条属性

除了上面用到的lineWidth属性,线条还有以下几个属性:

  • lineCap 属性设置或返回线条末端线帽的样式,可以取以下几个值: “butt” 向线条的每个末端添加平直的边缘(默认); “round” 向线条的每个末端添加圆形线帽; “square” 向线条的每个末端添加正方形线帽。
  • lineJoin 属性当两条线交汇时设置或返回所创建边角的类型,可以取以下几个值: “miter” 创建尖角(默认); “bevel” 创建斜角; “round” 创建圆角。
  • miterLimit 属性设置或返回最大斜接长度(默认为10)。斜接长度指的是在两条线交汇处内角和外角之间的距离。只有当 lineJoin 属性为 “miter” 时,miterLimit 才有效。

var canvas =

document.getElementById("canvas"); var context = canvas.getContext("2d"); //测试lineCap属性 //设置基准线便于观察 context.moveTo(10,10); context.lineTo(10,200); context.moveTo(200,10); context.lineTo(200,200); context.lineWidth="1"; context.stroke(); //butt context.beginPath(); context.moveTo(10,50); context.lineTo(200,50); context.lineCap="butt"; context.lineWidth="10"; context.stroke(); //round context.beginPath(); context.moveTo(10,100); context.lineTo(200,100); context.lineCap="round"; context.lineWidth="10"; context.stroke(); //square context.beginPath(); context.moveTo(10,150); context.lineTo(200,150); context.lineCap="square"; context.lineWidth="10"; context.stroke(); //测试linJoin属性 //miter context.beginPath(); context.moveTo(300,50); context.lineTo(450,100); context.lineTo(300,150); context.lineJoin="miter"; context.lineWidth="10"; context.stroke(); //round context.beginPath(); context.moveTo(400,50); context.lineTo(550,100); context.lineTo(400,150); context.lineJoin="round"; context.lineWidth="10"; context.stroke(); //square context.beginPath(); context.moveTo(500,50); context.lineTo(650,100); context.lineTo(500,150); context.lineJoin="bevel"; context.lineWidth="10"; context.stroke(); //测试miterLimit属性 context.beginPath(); context.moveTo(700,50); context.lineTo(850,100); context.lineTo(700,150); context.lineJoin="miter"; context.miterLimit="2"; context.lineWidth="10"; context.strokeStyle="#2913EC"; context.stroke();

各属性的不同取值的效果如下:

填充样式

前面用到的fillStyle和strokeStyle除了设置颜色外,还能设置其他填充样式,这里以fillStyle为例:

  • 线性渐变 使用步骤 (1)var grd = context.createLinearGradient( xstart , ystart, xend , yend )创建一个线性渐变,设置起始坐标和终点坐标; (2)grd.addColorStop( stop , color )为线性渐变添加颜色,stop为0~1的值; (3)context.fillStyle=grd将赋值给context。
  • 径向渐变 该方法与线性渐变使用方法类似,只是第一步接收的参数不一样 var grd = context.createRadialGradient(x0 , y0, r0 , x1 , y1 , r1 );接收起始圆心的坐标和圆半径以及终点圆心的坐标和圆的半径。
  • 位图填充 createPattern( img , repeat-style )使用图片填充,repeat-style可以取repeat、repeat-x、repeat-y、no-repeat。

效果如下:

图形变换

平移:context.translate(x,y),接收参数分别为原点在x轴方向平移x,在y轴方向平移y。

缩放:context.scale(x,y),接收参数分别为x坐标轴按x比例缩放,y坐标轴按y比例缩放。

旋转:context.rotate(angle),接收参数是坐标轴旋转的角度。

需要说明的是,对图形进行变化后,接下来的一次绘图是紧接着上一次的状态的,所以如果需要回到初始状态,要用到context.save();context.restore();来保存和恢复当前状态:

效果如下:

另外一个跟图形变换相关的是:矩阵变换 :context.transform(a, b, c, d, e, f, g)。参数的含义如下: a 水平缩放 ( 默认为1 ) b 水平倾斜 ( 默认为 0 ) c 垂直倾斜 ( 默认为 0 ) d 垂直缩放 ( 默认为1 ) e 水平位移 ( 默认为 0 ) f 垂直位移 ( 默认为 0 ) 读者可以自行验证其各个参数的效果,这里就不一一介绍了。

绘制曲线

跟绘制曲线的有四个函数,分别是:

  • context.arc(x,y,r,sAngle,eAngle,counterclockwise);用于创建弧/曲线(用于创建圆或部分圆)。接收的参数含义: | 参数 | 含义 | | :————- |:————-| | x | 圆的中心的 x 坐标 | |y|圆的中心的 y 坐标| |r|圆的半径| |sAngle|起始角,以弧度计(弧的圆形的三点钟位置是 0 度)| |eAngle|结束角,以弧度计| |counterclockwise|可选。规定应该逆时针还是顺时针绘图。False = 顺时针,true = 逆时针| 下面是几个arc()函数的几个示例:

var canvas =

document.getElementById("canvas"); var context =

canvas.getContext("2d"); context.strokeStyle = "#F22D0D"; context.lineWidth = "2"; //绘制圆 context.beginPath(); context.arc(100,100,40,0,2*Math.PI); context.stroke(); //绘制半圆 context.beginPath(); context.arc(200,100,40,0,Math.PI); context.stroke(); //绘制半圆,逆时针 context.beginPath(); context.arc(300,100,40,0,Math.PI,true); context.stroke(); //绘制封闭半圆 context.beginPath(); context.arc(400,100,40,0,Math.PI); context.closePath(); context.stroke();

效果如下:

  • context.arcTo(x1,y1,x2,y2,r); 在画布上创建介于两个切线之间的弧/曲线。接收的参数含义:

参数

含义

x1

弧的控制点的 x 坐标

y1

弧的控制点的 y 坐标

x2

弧的终点的 x 坐标

y2

弧的终点的 y 坐标

r

弧的半径

这里需要注意的是arcTo函数绘制的曲线的起始点需要通过moveTo()函数来设置,下面利用arcTo函数绘制一个圆角矩形:

效果如下:

  • context.quadraticCurveTo(cpx,cpy,x,y);绘制二次贝塞曲线,参数含义如下: 参数含义cpx贝塞尔控制点的 x 坐标cpy贝塞尔控制点的 y 坐标x结束点的 x 坐标y结束点的 y 坐标曲线的开始点是当前路径中最后一个点。如果路径不存在,那么请使用 beginPath() 和 moveTo() 方法来定义开始点。
  • context.bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y); 绘制三次贝塞尔曲线,参数如下: 参数含义cp1x第一个贝塞尔控制点的 x 坐标cp1y第一个贝塞尔控制点的 y 坐标cp2x第二个贝塞尔控制点的 x 坐标cp2y第二个贝塞尔控制点的 y 坐标x结束点的 x 坐标y结束点的 y 坐标

sdzfgdhg

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 javascript艺术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • canvas绘图基本使用方法(二)
    • 线条属性
      • 填充样式
        • 图形变换
          • 绘制曲线
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档