# canvas 基本功能介绍
- canvas 能做什么
1. 绘制简单图形线条
2. 裁剪图片
- 开始绘制画布
新建html文档添加 canvas标签
```html
<div style="position: relative;">
    <canvas id="canvas" width="800" height="800"></canvas>
</div>
```
注:canvas 标签初始化是 width 和 height 就是固定值,后期修改会导致 canvas 中绘图部分失败
```javascript
<script>
    // 获取 canvas 标签
    const canvas = document.getElementById('canvas');
    const cxt = canvas.getContext('2d');
    const w = canvas.width;
    const h = canvas.height;
   
    // strokeRect(x, y, width, height) 边框填充
    // 绘制边框 颜色 rgba(23,0,0, .6) 启点坐标 x: 0 y: 0 width: w height: h
    cxt.fillStyle = 'rgba(23,0,0, .6)';
    cxt.strokeRect(0, 0, w, h);
   
    // fillRect(x, y, width, height) 内部填充
    // 绘制内部填充图形 颜色 rgb(0,0,0) 启点坐标 x: 0 y: 0 width: 30 height: 30
    cxt.fillStyle = 'rgb(0,0,0)';
    cxt.fillRect(0, 0, 30, 30);
    cxt.fillStyle = 'rgb(255,200,200)';
    cxt.fillRect(30, 30, 30, 30);
    // 绘制图形开始路径
    cxt.beginPath();
    // 起始点
    cxt.moveTo(60, 60);
    // 第一个绘制点
    cxt.lineTo(90, 90);
    // 关闭路径
    cxt.closePath();
    // 绘制边框无内部填充图形
    cxt.stroke();
   
    cxt.beginPath();
    cxt.moveTo(5,90);
    cxt.lineTo(100, 90);
    cxt.lineTo(100, 120);
    cxt.lineTo(5,120);
    // 线条颜色
    cxt.strokeStyle = 'rgba(255, 231, 25, 1)';
    // 线条宽度
    cxt.lineWidth = 1;
    cxt.closePath();
    cxt.stroke();
    // 绘制圆弧arc(圆心x, 圆心y, 半径:r, 开始弧度, 绘制弧度, 顺势真:false|逆时针:true)
    cxt.beginPath();
    cxt.strokeStyle = "rgba(255,255,0,0.5)";
    cxt.arc(600, 600, 50, 0, 2 * Math.PI, false)
    cxt.stroke()
    cxt.beginPath();
    cxt.strokeStyle = 'rgba(255, 231, 25, 1)';
    cxt.arc(150, 150, 30, 0, Math.PI * 2, false);
    // 线条虚线
    cxt.setLineDash([20, 5]);  // [实线长度, 间隙长度]
    cxt.lineDashOffset = -0;
   
    cxt.stroke();
    // 绘制文字
    cxt.font = "12px sans-serif";
    // 文字水平位置
    cxt.textAlign  = 'center';
    // 文字垂直位置
    cxt.textBaseline  = 'middle';
    // 实体文字
    cxt.fillText("天若有情", 150, 150);
    // 空心文字
    cxt.strokeText("天若有情", 10, 200)
    // 填充img
    const img = new Image();
   
    img.onload = function () {
        console.log('------------------')
        cxt.drawImage(img,300,0); // 正常加载
        cxt.drawImage(img,300,0, 300, 150); // 缩放
        cxt.drawImage(img,300,0, 300, 150, 400, 75, 50, 50); // 切片
        // 将canvas 保存成base64
        const imgs = canvas.toDataURL('image/png')
    console.log(imgs);
    }
    img.src = 'bee.883b429.jpg';
    // 移动 canvas
    // cxt.save(); //保存坐原点平移之前的状态
    // cxt.translate(100, 100);
    // cxt.strokeRect(0, 0, 100, 100)
    // cxt.restore(); //恢复到最初状态
    // cxt.translate(220, 220);
    // cxt.fillRect(0, 0, 100, 100)
    // cxt.save();
    // cxt.translate(200, 200);
    // cxt.strokeRect(0, 0, 20, 20);
    // cxt.restore();
    // cxt.translate(220, 220);
    // cxt.fillRect(0, 0, 100, 100)
    cxt.beginPath();
    cxt.strokeStyle = "rgba(255,255,0,0.5)";
    cxt.arc(600, 600, 50, 0, 2 * Math.PI, false)
    cxt.stroke()
   
</script>
```
注:加载img文件时,要等到img加载完成后才能绘制。所有和img绘制相关 放在img.loader 里面。
注:保存 base64 文件时要等到,canvas 内容全部加载完成后,才能全部保存,否侧只保存canvas加载内容。

canvas 基本介绍的更多相关文章

  1. Android Canvas类介绍

    当我们调整好画笔之后,现在需要绘制到画布上,这就得用Canvas类了.在Android中既然把Canvas当做画布,那么就可以在画布上绘制我们想要的任何东西.除了在画布上绘制之外,还需要设置一些关于画 ...

  2. canvas的介绍

    1.我们前端的绘图技术有哪些: 统计图表:echarts 实时走势图:canvas: 在线画板:魔猴: HTML5游戏:three.js 2.我这里主要讲的是canvas绘图: <canvas& ...

  3. HTML5中canvas介绍

    1.什么是Canvas canvas 是 HTML5 提供的一个用于展示绘图效果的标签 canvas 提供了一个空白的图形区域,可以使用特定的JavaScript API来绘画图形(canvas 2D ...

  4. Html5 学习系列(五)Canvas绘图API快速入门(2)

    Canvas绘图API Demos 上一篇文章中,笔者已经给大家演示了怎么快速用Canvas的API绘制一个矩形出来.接下里我会在本文中给各位介绍Canvas的其他API:绘制线条.绘制椭圆.绘制图片 ...

  5. HTML5画布Canvas

    一.Canvas概念介绍 1.概念 Canvas : 画布 2.作用 : HTML5 Canvas 元素用于图形的绘制, 通过脚本(通常是JavaScript)来完成.它本身只是个图形容器,必须使用脚 ...

  6. H5 canvas圆形的时钟

    今天用H5中的canvas标签做一个时钟,H5中有很多好用的新增标签,真的很不错. 1.canvas标签介绍 <canvas> 标签定义图形,比如图表和其他图像,你必须使用脚本来绘制图形. ...

  7. canvas 从初级到XX 1# 部分非基础原生API的使用 [初级向]

    标题canvas 从初级到XX,XX是因为本文随机都可能会太监,并不会支持到入土.请慎重的往下看. 对于canvas的介绍,随处都可以找到,也就不啰嗦太多了.就直奔主题了. 先看一段代码,以及实现的效 ...

  8. 2小程序canvas使用,及一些坑,以及自己的一些小总结

    自己做了一个小程序,主要用于给头像加图标的那种,和qq似的,主要用canvas做的, 第一回用,掉了很多坑,所以今天总结一下自己所做的,如果大家有不理解的地方,欢迎提问:如果帮到大家的话,帮忙点个啥的 ...

  9. js文件上传原理(form表单 ,FormData + XHR2 + FileReader + canvas)

    目录 form表单上传 FormData + XHR2 + FileReader + canvas 无刷新本地预览压缩上传实例 目前实现上传的方式 浏览器小于等于IE9(低版本浏览器)使用下面的方式实 ...

随机推荐

  1. Java中的函数式编程(四)方法引用method reference

    写在前面 我们已经知道,lambda表达式是一个匿名函数,可以用lambda表达式来实现一个函数式接口.   很自然的,我们会想到类的方法也是函数,本质上和lambda表达式是一样的,那是否也可以用类 ...

  2. WPF中的命令(Command)

    这节来讲一下WPF中的命令(Command)的使用. [认识Command] 我们之前说过,WPF本身就为我们提供了一个基础的MVVM框架,本节要讲的命令就是其中一环,通过在ViewModel中声明命 ...

  3. FastAPI 学习之路(二十九)使用(哈希)密码和 JWT Bearer 令牌的 OAuth2

    既然我们已经有了所有的安全流程,就让我们来使用 JWT 令牌和安全哈希密码让应用程序真正地安全. 关于 JWT 它是一个将 JSON 对象编码为密集且没有空格的长字符串的标准.字符串看起来像这样: e ...

  4. 热身训练3 Palindrome

    Palindrome 简要题意:  我们有一个字符串S,字符串的长度不超过500000. 求满足S[i]=S[2n−i]=S[2n+i−2](1≤i≤n)(n≥2)的子串个数.  分析: 我们能通过简 ...

  5. Spring IOC:BeanDefinition加载注册流程(转)

    BeanFactory接口体系 以DefaultListableBeanFactory为例梳理一下BeanFactory接口体系的细节 主要接口.抽象类的作用如下: BeanFactory(根据注册的 ...

  6. 国产Linux服务器-Jexus的初步使用

    题记:年末研究了一些关于Net跨平台的东西,没错,就是Jexus,就是Windows下面的IIS. 官网:https://www.jexus.org/ 先看看官网的解释再说其他的问题,Jexus就是L ...

  7. openstack 虚机热迁移问题:虚机状态一直处于迁移中的情况处理

    前提:在偶尔的虚机热迁移中,发现虚机一直属于迁移状态中. 但是查看后台流量监控,发现没有流量已经下来了.然后在目标机器上查看,发现kvm已经在目标机器上. 1.查看kvm 实际所处宿主机方法: a.拿 ...

  8. 从拥有一个阿里云账号开始使用Maxcompute

    本教程并不会创建子账户来管理maxcompute,是直接使用主账号来对maxcompute进行管理(强烈不推荐在生产环境中这样做!!) Step1:创建阿里云账号并实名认证 ​ 创建一个阿里云账号(使 ...

  9. (转)刚来的大神彻底干掉了代码中的if else...

    一旦代码中 if-else 过多,就会大大的影响其可读性和可维护性. 首先可读性,不言而喻,过多的 if-else 代码和嵌套,会使阅读代码的人很难理解到底是什么意思.尤其是那些没有注释的代码. 其次 ...

  10. 欢迎加入XiyouLinuxGroup邮件列表

    一:为什么要使用邮件列表? 与QQ,微信等即时通讯的交流方式相比,使用邮件列表交流有以下好处: 保存性好,易于阅读.它能将一个问题讨论的过程完全保存下来,但是QQ的话,聊天记录很容易就刷没了,再也无法 ...