# 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. BUAA_2020_软件工程_个人项目作业

    作业抬头(1') 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人项目作业 我在这个课程的目标是 了解软件工程的技术,掌握工程化开发的能力 这 ...

  2. Noip模拟83 2021.10.26

    T1 树上的数 有手就能在衡中$OJ$上过,但是$WaitingCoders$不行,就是这样 必须使用$O(n)$算法加上大力卡常,思路就是找子树内没更新的更新,更新过了直接$return$ 1 #i ...

  3. HDI PCB一阶和二阶和三阶如何区分??

      一阶板,一次压合即成,可以想像成最普通的板二阶板,两次压合,以盲埋孔的八层板为例,先做2-7层的板,压好,这时候2-7的通孔埋孔已经做好了,再加1层和8层压上去,打1-8的通孔,做成整板.三阶板就 ...

  4. Linux过来人帮你理清学习思路

    很多同学接触linux不多,对linux平台的开发更是一无所知. 而现在的趋势越来越表明,作为一个优秀的软件开发人员,或计算机it行业从业人员,="" 掌握linux是一种很重要的 ...

  5. robot_framewok自动化测试--(5)Screenshot 库

    Screenshot 库 Scrennshot 同样为 Robot Framework 标准类库,我们只将它提供的其它中一个关键字"TakeScreenshot",它用于截取到当前 ...

  6. 手把手从0到1:搭建Kubernetes集群

    搭建 k8s 集群网上很多教程,如果是手工部署或者实验环境可以直接使用 MiniKube 或者 Kind,来在本地启动简单的 Kubernetes 集群进行后面的学习即可.如果是使用 MiniKube ...

  7. redux 的简单实用案例

    redux 的简单实用案例 整体思想与结构 创建一个Action 创建一个Reducer 创建Store 在App组件开始使用 整体思想与结构 文件目录如下: 构建 action,通过创建一个函数,然 ...

  8. 2019年java大型项目技术选型

    学习一下 1,公司使用的架构是:SpringCloud + K8S 这一套主流技术,但是还是入门级别的. 还包含apollo  ,xxlJob ,SkyWalking,Cat,GrayLog等 2,G ...

  9. Jenkins执行 remote SSH 命令

    1.安装 SSH Pipeline Steps 插件 2.在凭据中添加remote server凭据,如下 3.Pipeline编写: def GetRemoteServer(ip){ def rem ...

  10. jQuery css()选择器使用说明

    css选择器只是jquery中的一个功能罢了,下面我来给各位朋友详细介绍jQuery css()选择器使用方法与说明详解,有需要了解学习的同学可参考. CSS操作有一个重要的方法:CSS() CSS( ...