canvas基础用法

fishj fishj     2022-10-07     330

关键词:

canvas 是 HTML5 提供的一个用于展示绘图效果的标签. canvas 原意画布, 帆布. 在 HTML 页面中用于展示绘图效果. 最早 canvas 是苹果提出的一个方案, 今天已经在大多数浏览器中实现.

  非零环绕原则:
    如果需要判断某一个区域是否需要填充颜色. 就从该区域中随机的选取一个点.
    从这个点拉一条直线出来, 一定要拉到图形的外面. 此时以该点为圆心.
    看穿过拉出的直线的线段. 如果是顺时针方向就记为 +1, 如果是 逆时针方向,
    就记为 -1. 最终看求和的结果. 如果是 0 就不填充. 如果是 非零 就填充.

       技术分享图片

首先给 canvas设置宽高不能再样式表里设置,只能在行内中设置,这样就不会失真,默认宽高是300,150

  ctx.moveTo :(x , y): 将绘制的起始点设置为x ,y
  ctx.lineTo : (x , y):从当前位置
  ctx.stroke():描边绘图,将坐标点连起来;
  ctx.fill():调用fill方法会将所有的点连接起来,并构成一个封闭的图形结构,如果所有的描点没有构成封闭结构,也会将开始的起点,与最终的点连接起来,构成一个闭合 的图形,并填充颜色,默认黑色;
  ctx.beginPath():开启新路径;
  closePath( ):闭合路径;
  ctx.strokeStyle= : 设置边框颜色;
  ctx.fillStyle=:设置填充颜色;
  ctx.lineWidth=:设置线宽;
  ctx.lineCap=:设置线 末端 以什么类型结束; butt(两端使用方形结束) round(两端末端添加圆形线帽) square (两端末端添加正方形线帽)
  ctx . lineJoin=:设置相交线的拐点; ‘round‘ 使用圆角连接. bevel‘ 使用平切连接. ‘miter‘ 使用直角转.

虚线:
  lineDashOffset = : 用于设置开始绘制虚线的偏移量. 数字的正负表示左右偏移;
  getLineDash( ) :获取实虚线数组;
  setLineDash([ 5, 5 ] ) : 设置实线长度为5,虚线长度为5;

绘制矩形:
  Ctx . rect ( x , y , width , height ) : 只是描边,必须要配合stroke()/ fill( ) 使用;
  Ctx . strokeRect (x , y , width , height) : 直接绘制正方形;
  Ctx . fillRect (x , y , width , height) : 绘制正方形并且填充默认黑色;
  Ctx . clearRect(x , y , width , height): 清除绘制的矩形;

清除画布:
  Ctx . clearRect ( 0 , 0 , cas . width , cas . height ) :从画布圆点开始,以画布的高和宽进行清除;
  Cas . width = cas . width : 重新设置画布的宽,相当于画布被刷新了一次,也就被清空;

圆弧:
  ctx . arc(x , y , r , startAngle . endAngle , anticlockwise) 6个参数,前五必填;
      x , y 是圆心坐标;
       radius 表示圆弧半径, 单位为弧度;
      startAngle 与 endAngle 表示开始到结束的角度,从 x 正轴为 0°, 顺时针为正方向 .
      anticlockwise (方向正反):表示是否采用默认的正向角度, 如果传入 true 表示逆指针为正 . 该参数可选.


弧度制:
  为了更好的计算角度,我们把角度提供一个新的定义,用 PI (π)作为单位,将单位圆的一个整圈(360度)记作 2 倍的 PI;
这样的度量表示就是弧度制的表示方法;
  angel 角度;
  radian 弧度 ;


角度转换为弧度:
  弧度 = 角度 / 180 * π π =180度 弧度 = 60度 / 180度 * π ;


弧度转换为角度 :
  角度 = 弧度 * 180 / π 角度 =(π / 3) * 180 / π ;

 

 

计算圆弧上的点的坐标:
  x = x0 + r * Math . cos(a); x0为圆心x
  y = y0 + r * Math . sin(a); y0为圆心y

 

绘制文本:
  Ctx . fillText ( " 文字内容 ",x , y ) : 实心文字; x,y为文本的起始点坐标,但是是以文字的左下角为起始点坐标;
  Ctx . strokeText (“ 文本内容 ”, x , y): 描边文字,镂空的文字; x,y为文本的起始点坐标,但是是以文字的左下角为起始点坐标;
  Ctx . font():设置绘制字体的各种信息, 与 CSS 语法一致 , 设置字体形状 , 样式 , 字号粗细等 style | variant | weight | size/line-height | family.


文字对齐属性:
  ctx . textAlign = : 水平对齐; left( 默认start ) / right(end) / center ; 以左下角的点为竖线,水平向左 / 右 / 中间对齐;
  Ctx . textBaseline = : 垂直对齐; bottom(默认) / middle(英文四条线上的第二条线) / top(悬挂在基线下) ; 以左下角的点为横线, 垂直向上 / 中 / 下对齐;

   /alphabetic 表示字母参考线, ideographic 会比它低一点, hanging 表示悬挂. [ 对齐方式:可不记 ]


绘制图片:
  [ 绘制图片要等待图片获取到了之后再绘制,img.onload=function( ) { ctx.drawImage ( img, x , y ) } ]
    ctx . drawImage ( img, x , y ) : 将图片绘制到x, y表示的位置去;
    ctx . drawImage ( img, x , y, width , height ) : 将图片绘制到指定的矩形里去;
    Ctx . drawImage ( img , sx , sy , sWidth , sHeight , dx , dy , dWidth , dHeight ):
    这里的带有 s 前缀的参数就是指图源的矩形区域,将图片的 ( 100, 100, 300, 200 ) 处的内容绘制到页面的 ( 100, 100, 300, 200 ) 的位置.

变换:
  Ctx . scale ( ) : 该方法实现水平与垂直的缩放.
        参数 x 控制水平缩放倍率. 传参 1 表示不作缩放, 传入大于 1 的数字表示扩大.
        参数 y 控制垂直缩放倍率. 传参 1 表示不作缩放, 传入大于 1 的数字表示扩大;

  Ctx . translate( ) : 平移变换就是将原有坐标轴进行平行移动, 那么坐标轴移动后就可以使用新坐标来绘制图形了.

  Ctx . rotate( radian ) : 该方法将坐标轴进行旋转变换.
         参数是弧度, 表示旋转的方式. 正数表示顺时针旋转, 负数表示逆时针旋转.

canvas状态:
  Ctx . save(): 保存状态,将画的状态封起来;
  Ctx.restore() : 恢复成开始的状态,也就是再次beginPath( )开始之后,不会继承上一次的图形属性效果;
  两者要配合头尾使用,才能避免继承的问题;

Konva:
使用Konva的步骤
  1.需要引入Konva库
  2.在页面中放置一个div作为舞台的容器(需要设置id属性)
  3.使用Konva创建舞台
    在Konva中Konva这个名字是一个命名空间,所有的构造函数都是它的成员
    例: var stage = new Konva . Stage(); Stage就是Konva的构造函数成员
  4.创建舞台使用Konva.Stage
    参数必须有width, height, container

Stage : 舞台, 类似html
  var stage =new Konva . Stage({
    width : 600,       宽为600,高为400的舞台
    height : 400,
    container: ‘dv‘    容器为div
  });


Layer : 层,类似body, 舞台中要有层; var layer = new Konva . Layer ();


Rect : 矩形 var rect = new Konva . Rect({ 正方形的属性 }); 类似div

add () : stage . add( Layer ) / layer . add ( rect ) 必须把层放在舞台上, 再把元素放在层里,就可以渲染出来;
    注意点: 先创建舞台,再创建层,再绘制图形,再将图形添加到层中,再将层添加到舞台中,千万不能还没绘制图形,就先把层添加到舞台上,而再去绘制图形,不然添加的是个空图层;

控制台里获取x.y的坐标值: Element.x( ) Element.y( ) ;

 






































































































自定义控件paint,canvas基础用法-drawbitmap(),drawtext()详解(代码片段)

本篇博客继续学习Paint和Canvas的基础用法,上一篇博客学习了基础API使用(基础几何图形,Path路径),接下来学习绘制文本和绘制图片上一篇文章,没看的有必要先了解一下:自定义控件(一)... 查看详情

自定义控件paint,canvas基础用法-path函数大全,canvas绘制基本几何图形(代码片段)

接触Android一段时间之后发现自定义控件是一个很好玩的东西,可以绘制出各种绚丽的UI,成就感十足呀,同时自定义控件也是应用开发必备技能,以前总想着写一些常用的控件可以提供给别人使用,后来发现&#... 查看详情

canvas画板基础应用的学习

canvas是html5中的绘图容器,我们可以通过javascript的控制来进行图形的绘制,绘制对象可以是路径、盒、圆、字符等,同时,你也可以通过js给画布添加图像,下面来介绍canvas的各种基本的用法:1、首先,我们需要在html标签中创... 查看详情

canvas图形绘制

前面的话  前面分别介绍了canvas的基础用法和进阶用法,本文将使用canvas的各种语法进行图形绘制 绘制线条【绘制线条】  下面来尝试绘制一段线条<canvasid="drawing"style="border:1pxsolidblack"><p>Thecanvaselementisnotsupported... 查看详情

canvas入门级基本用法实现雨滴下落特效(代码片段)

canvas基础知识点参考各种文档,直接上代码,有非常详细注释<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>canvas雨滴特效</title><style>bodymargin:0;overflow:hidden;#raindisplay:blo 查看详情

canvas基础讲解加示例(代码片段)

...,以前有的实战站项目写的还可以,你能不能从基础教教让他零基础也能上手。也不是什么难题。我就准备了今天的canvas简单用法介绍。因为你若想实现一些不错的效果基础阶段还是要用到canvas的。技术栈之前其实有介... 查看详情

canvas基础讲解加示例(代码片段)

...,以前有的实战站项目写的还可以,你能不能从基础教教让他零基础也能上手。也不是什么难题。我就准备了今天的canvas简单用法介绍。因为你若想实现一些不错的效果基础阶段还是要用到canvas的。技术栈之前其实有介... 查看详情

canvas中save和restore的用法

在创建新的控件或修改现有的控件时,我们都会涉及到重写控件或View的onDraw方法。 onDraw方法会传入一个Canvas对象,它是你用来绘制控件视觉界面的画布。 在onDraw方法里,我们经常会看到调用save和restore方法,它们到底是... 查看详情

android绘图基础:canvas画布——自定义view基础(绘制表盘矩形圆形弧渐变)

  Canvas画布,通过它我们可以自定义一个View,设置View的相关效果之类的。感觉用法差不多,重要的是要理解方法中传入的参数的含义,比如float类型的参数,传递的是坐标,已开是没有注意传入的参数时坐标... 查看详情

canvas在视频中的用法

<!doctypehtml><html><head><metacharset="UTF-8"><title>model</title><metaname="format-detection"content="telephone=no"/><metaname="viewport"content="width=d 查看详情

canvas绘画基础:认识canvas画布

...。最近工作中涉及到画图的任务,下面来了解一下canvas的基础:canvas画布。1<styletype="text/css">2body{padding:40px0040px;}3#canvas1,#canvas2{background:#ff0000;opac 查看详情

html2canvas截屏用法

<!DOCTYPEhtml><htmllang="en"><head><metacharset="utf-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width,initial-scal 查看详情

canvas的基础使用。

目录:创建canvas。绘制直线、多边形和七巧板。绘制弧和圆。(有些图过于宽,被挤压了。可以去相册【canvas用到的图。】看原图。) 创建canvas。HTML5的新标签<canvas></canvas>在使用时会添加id,通过id来获取canvas元素... 查看详情

canvas基础语法

...,将编程工作者彻底释放出创造力。本文将详细介绍canvas基础知识 添加canva 查看详情

canvas基础

什么是canvas?canvas就是HTML5中提供的一个标签,主要的作用:用来展示通过JavaScript中提供的绘图API来绘制的内容,canvas的默认宽高为300*150px,IE9以上的浏览器才支持canvas标签设置canvas的宽高不能使用css方式来设置,不管行内还是内嵌... 查看详情

canvas之绘制基本形状

...c;能够在上面绘制各种东西,是安卓平台2D图形绘制的基础,非常强大。一般来说,比较基础的东西有两大特点:1.可操作性强:由于这些是构成上层的基础,所以可操作性必然十分强大。2.比较难用:各种方... 查看详情

canvas标签的基本用法(代码片段)

1、canvas和其他标签一样使用,但是IE8以下是不支持的,可以在canvas里面加一个span用来提示,例如:<canvas><span>IE8不支持canvas</span></canvas>另外画布的大小,需要直接在内联样式里面设置,而不要在外部样式表里... 查看详情

关于html2canvas用法的总结

参考技术A最近H5项目有个功能需求:长按微信网页保存为截图。本人使用了html2canvas.js实现,感觉效果还不错,有几个注意点和大家分享一下。html2canvas官网:https://html2canvas.hertzen.com/使用的版本是最新版本:^1.0.0-alpha.12html2canvas... 查看详情