canvas 应用

278 阅读3分钟

canvas

  • 最终实现的效果裁剪-demo

  • 旋转demo

  • Canvas 是 HTML5 中的一个重要特性,它可以使用 JavaScript 在网页上进行图形绘制。它提供了一系列的绘图 API,可以用来绘制图形、图像、文本等。常见的应用场景有:

    • 游戏开发:Canvas 支持高性能的 2D 图形绘制,可以用来开发 HTML5 游戏。

    • 数据可视化:Canvas 可以绘制各种图表,如折线图、柱状图、饼图等,常用于数据可视化。

    • 图像处理:Canvas 支持对图像进行各种操作,如缩放、旋转、剪切等,常用于图像编辑和处理。

    • 电子签名:Canvas 可以绘制手写笔迹,常用于电子签名场景。

    • 动画效果:Canvas 支持动画效果,可以用来制作各种动画。

1.第一步会使用

  • 布置画布:通过添加标签,添加canvas元素
  • 获取画布:通过标签的id,获得canvas对象
  • 获得画笔:通过canvas对象的getContext("2d")方法,获得2D环境
<canvas id=“canvas”></canvas>
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");

2. 画线段。

  • 移动画笔,使画笔移动至绘画的开始处

  • 确定第一笔的停止点

  • 规划好之后,选择画笔(包括画笔的粗细和颜色等)

  • 确定绘制

  • 2.1 绘制线条的方法

    • 移动画笔(moveTo())
    • 笔画停点(lineTo())
    • 选择画笔,设置画笔的基础参数/宽度+填充的颜色等
    • lineWitdh /strokeStyle
    • 绘制fill() 填充 和stroke()
    • beginPath()/closePath().在绘制的过程中,我们务必要使用。绘制结束之后关闭。
var canvas = document.getElementById("canvas");
        canvas.width = 800;
        canvas.height = 600;
        var context = canvas.getContext("2d");

        context.beginPath();
        context.moveTo(100,100);
        context.lineTo(600,600);
        context.lineWidth = 5;
        context.strokeStyle = "#AA394C";
        context.stroke();
        context.closePath();

2.2 绘制矩形

  • rect(x,y,width,height);
    • 只能调用stroke() 或 fill()后才会真正作用于画布
  • fillRect(x,y,width,height);
  • strokeRect(x,y,width,height);

3. 绘制图像-drawImage

  • 三参数:context.drawImage(img,x,y)
  • 五参数:context.drawImage(img,x,y,width,height)
  • 九参数:context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height)
  • 参数含义

4. 旋转画布

  • 通常我们会借助数据公式
  • translate/rotate 两个方法 结合使用
  • translate(x,y) 做原点回归
  • rotate(deg) 旋转角度/弧度
    • Canvas是基于状态的绘制,所以每次旋转都是接着上次旋转的基础上继续旋转,所以在使用图形变换的时候必须搭配save()与restore()方法,一方面重置旋转角度,另一方面重置坐标系原点。

5. 裁剪clip().

// 实际图片的裁剪还是使用的drawImage
- 计算出裁剪的坐标,计算出裁剪的宽和高,计算出画布的大小

- Canvas API的图像裁剪功能是指,在画布内使用路径,只绘制该路径内所包含区域的图像,不会只路径外的图像。这有点像Flash中的图层遮罩
- 裁剪是对画布进行的,裁切后的画布不能恢复到原来的大小,也就是说画布是越切越小的,要想保证最后仍然能在canvas最初定义的大小下绘图需要注意save()和restore()。画布是先裁切完了再进行绘图。并不一定非要是图片,路径也可以放进去~
  • clip()改变了绘画环境。context调用后,所裁剪的区域就是clip ()后的绘制环境,clip()之后的绘画只能在裁剪区域中渲染

  • clip()裁剪后不能访问裁剪区域的其他区域(只能渲染在裁剪区域) clip()能限定显示区域 save()用来保存Canvas的状态。save()之后,可以操作canvas的平移,缩放,旋转,裁剪等操作。(restore()可以比save()少,但不可以比restore多,因为restore多会引发Error).。

  • Canvas的clip()的理解和使用

6. 参考材料