Canvas 绘图使用语法

1、canvas标签

  <canvas  width=""  height=""  id="">

  您的浏览器不支持canvas,请更换浏览器!

*注:canvas的宽高度最好设置成行内样式,不然会等比变化

例如:在嵌入样式中设置canvas 宽高为:500px X 500px

在canvas中画100px * 100px 的矩形,矩形宽高会等比变化

500/300 : 500/150 = x/100 : y/100;

  </canvas>

 2、默认宽度300px,默认高度 150px

 3、canvas绘图环境设置

  getContext("2d"); 目前支持2d绘图环境

/*

    var can = document.getElementById("can");

    var cxt = can.getContext("2d"); //2d绘图环境,提供api[stroke、fill、etc.]

*/

4、绘图路劲:

  beginPath() :开始路劲

  closePath():结束路劲

//形成一个闭合路径

  moveTo(x,y):将触笔移动到x,y

  lineTo(x,y):绘制到x,y

/*绘制三角形*/



//一个起点,两个终点




  stroke(): 触笔方法 画线  默认为黑色 绘制一个空心的矩形

  fill():填充方法  绘制一个实心的矩形


  rect(x,y,w,h):矩形路劲/*x => 横坐标  y => 纵坐标 w => 宽度 h=> 高度 */


/*

cxt.rect(50,50,100,100);

cxt.stroke();

*/


  save():保存路劲

  restore():恢复路劲

/*相当于开辟一个新的空间,把这个内容放在新的空间里,画完在释放出来*/


5、绘制矩形:

  fillRect(x,y,w,h)   填充实心矩形  /*cxt.fillRect(50,50,100,100);*/

  strokeRect(x,y,w,h)  绘制空心矩形 /*cxt.strokeRect(50,50,100,100);*/

  clearRect(x,y,w,h)  清楚矩形选区

/*cxt.clearRect(0,0,can.width,can.height);清除整个canvas选区*/

6、设置绘图样式:

  fillStyle填充颜色

  strokeStyle触笔颜色

/*cxt.strokeStyle = "#03f";cxt.strokeRect(50,50,100,100);*/

  lineWidth触笔宽度(线宽)

/*cxt.lineWidth = 10*/


两者同时使用时显示与书写顺序有关:

7、图形边界样式:

  lineJoin : 边界连接点样式

  miter(默认值),round(圆角),bevel(斜角)

/*ctx.lineJoin="round";*/

  lineCap端点样式

  butt(默认值),round(圆角),square(高度多出线宽一半)

/*ctx.lineCap="round";*/

8、绘制圆形:

  arc(x,y,r,0,360,false)

        x,y  圆心坐标位置

        圆半径

        0,360 0度到360度 绘制一个圆形

        true/false  顺时针/逆时针绘图
/*cxt.arc(250,250,50,0,360,false);*/

9、绘制曲线

  arcTo(x1,y1,x2,y2,r)

  x1,y1 坐标一  x2,y2坐标二   r圆弧半径

  quadraticCurveTo(dx,dy,x1,y1)

 10、 贝塞尔曲线:dx,dy控制点  x1,y1结束坐标

  bezierCurveTo(dx1,dy1,dx2,dy2,x1,y1)

  贝塞尔曲线:dx1,dy1 控制点一 dx2,dy2控制点二

  x1,y1结束坐标

11、canvas变换

  translate(x,y)

  坐标基准点偏移 从起始点为基准,移动到当前位置

  rotate(弧度): 旋转  弧度公式 :角度*Math.PI/180

  scale : scale(wb,hb)缩放比例(缩放canvas绘制的图片)

相对于前一个进行缩放

定义和用法

arc() 方法创建弧/曲线(用于创建圆或部分圆)。

提示:如需通过 arc() 来创建圆,请把起始角设置为 0,结束角设置为 2*Math.PI。

提示:请使用 stroke() 或 fill() 方法在画布上绘制实际的弧。

弧/曲线

  • 中心:arc(100,75,50,0*Math.PI,1.5*Math.PI)
  • 起始角:arc(100,75,50,0,1.5*Math.PI)
  • 结束角:arc(100,75,50,0*Math.PI,1.5*Math.PI)

JavaScript 语法:

context.arc(x,y,r,sAngle,eAngle,counterclockwise);

参数值

参数 描述
x 圆的中心的 x 坐标。
y 圆的中心的 y 坐标。
r 圆的半径。
sAngle 起始角,以弧度计。(弧的圆形的三点钟位置是 0 度)。
eAngle 结束角,以弧度计。
counterclockwise 可选。规定应该逆时针还是顺时针绘图。False = 顺时针,true = 逆时针。


12、

绘制图片

  图片预加载,获取图片文件

  onload中调用

  drawImage(img,x,y,w,h);绘制图片(图片,坐标x,坐标y,宽度,高度)

设置背景

  createPattern(img,平铺方式)

   平铺方式 : repeat,repeat - x,repeat - y,no -repeat
13、 颜色渐变

  线性渐变:createLinearGradient(x1,y1,x2,y2)

            x1,y1起始坐标点

            x2,y2结束坐标点

  径向渐变:createRadialGradient(x1,y1,r1,x2,y2,r2)

           x1,y1,r1内圆坐标及半径

           x2,y2,r2外圆坐标及半径

  addColorStop(位置,颜色)

  位置:渐变点  0-1之间 可多个


线性渐变:

径向渐变:

14、绘制文本

  strokeText(文本,x,y);  绘制空心文本

  fillText(文本,x,y); 绘制实心文本

  font = "font-size  font-family" :尺寸 字体缺一不可

  textAlign = "";文本左右对齐方式

               start center end  left right

  textBaseline文本上下对齐方式

          alphabetic  默认文本基线是普通的字母基线

          top  文本基线是em方框的顶端。。

         hanging  文本基线是悬挂基线

          middle  文本基线是em方框的正中

           ideographic  文本基线是表意基线

          bottom  文本基线是em方框的底端


  measureText(文本).width; 文本实际宽度(只有宽度值)


15、阴影

  shadowOffsetX,shadowOffsetY    x轴、y轴偏移

  shadowBlur    阴影模糊度

  shadowColor  阴影颜色

  默认颜色:rgba(0,0,0,0)

16、像素

  createImageData(sx,sy)

  创建新的、空白的 ImageData对象

  getImageData(x1,y1,sx,sy)【必须是同源,同一域名下】

  返回 ImageData对象,该对象为画布上指定的矩形复制像素数据  putImageData(img,x2,y2)

   把图像数据(从指定的  ImageData 对象)放回画布上

17、 合成

          globalAlpha  设置或返回绘图的当前 alpha 或透明值

          globalCompositeOperation 设置或返回新图像如何绘制到已有的图像上

  source-over默认在目标图像上显示源图像

  source-atop在目标图像顶部显示源图像源图像位于目标图像之外的部分是不可见的

  source-in  在目标图像中显示源图像只有目标图像内的源图像部分会显示,目标图像是透明的

  source-out  在目标图像之外显示源图像只会显示目标图像之外源图像部分,目标图像是透明的

  destination-over在源图像上方显示目标图像

  destination-atop在源图像顶部显示目标图像源图像之外的目标图像部分不会被显示

  destination-in在源图像中显示目标图像只有源图像内的目标图像部分会被显示,源图像是透明的

  destination-out在源图像外显示目标图像只有源图像外的目标图像部分会被显示,源图像是透明的

  lighter显示源图像 + 目标图像

  copy显示源图像忽略目标图像

   xor使用异或操作对源图像与目标图像进行组合


18、 将画布导出为图片

  火狐、谷歌浏览器右键菜单可直接导出为图片

  toDataURL


19、事件 

  isPointInPath(x,y)

  如果指定的点位于当前路径中,返回布尔值

  只能判断最后绘制出来的图片



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Vue3 的 `ref` 和 `canvas` 元素来实现签名功能。以下是一个简单的实现: 1. 在 Vue3 组件的 `template` 中添加一个 `canvas` 元素,并给它添加一个 `ref` 属性: ```html <template> <canvas ref="canvas"></canvas> </template> ``` 2. 在组件的 `setup` 方法中获取该 `canvas` 元素的引用,并定义一个 `draw` 方法用于绘制签名: ```javascript <script> import { ref } from 'vue'; export default { setup() { const canvasRef = ref(null); const draw = (ctx, x, y, isDown) => { if (isDown) { ctx.beginPath(); ctx.strokeStyle = 'black'; ctx.lineWidth = 2; ctx.lineJoin = 'round'; ctx.moveTo(x, y); ctx.lineTo(x, y); ctx.stroke(); } }; return { canvasRef, draw, }; }, }; </script> ``` 3. 在组件的 `mounted` 钩子中获取 `canvas` 元素的 `2d` 绘图上下文,并添加事件监听器,监听鼠标的移动和点击事件: ```javascript <script> import { ref } from 'vue'; export default { setup() { const canvasRef = ref(null); const draw = (ctx, x, y, isDown) => { if (isDown) { ctx.beginPath(); ctx.strokeStyle = 'black'; ctx.lineWidth = 2; ctx.lineJoin = 'round'; ctx.moveTo(x, y); ctx.lineTo(x, y); ctx.stroke(); } }; const mounted = () => { const canvas = canvasRef.value; const ctx = canvas.getContext('2d'); let isDrawing = false; let lastX = 0; let lastY = 0; canvas.addEventListener('mousedown', (e) => { isDrawing = true; lastX = e.offsetX; lastY = e.offsetY; }); canvas.addEventListener('mousemove', (e) => { if (!isDrawing) return; draw(ctx, e.offsetX, e.offsetY, isDrawing); lastX = e.offsetX; lastY = e.offsetY; }); canvas.addEventListener('mouseup', () => { isDrawing = false; }); canvas.addEventListener('mouseout', () => { isDrawing = false; }); }; return { canvasRef, mounted, }; }, mounted() { this.mounted(); }, }; </script> ``` 现在,`canvas` 元素就可以实现签名功能了。当用户在 `canvas` 上按下鼠标并移动时,会在 `canvas` 上绘制出一条曲线。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值