# 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. 第五课第四周笔记1:Transformer Network Intuition 变压器网络直觉

    目录 Transformer Network Intuition 变压器网络直觉 Transformer Network Intuition 变压器网络直觉 深度学习中最令人兴奋的发展之一是 Tran ...

  2. 第32篇-解析interfacevirtual字节码指令

    在前面介绍invokevirtual指令时,如果判断出ConstantPoolCacheEntry中的_indices字段的_f2属性的值为空,则认为调用的目标方法没有连接,也就是没有向Constan ...

  3. 关于评论区empty。。。

    空荡荡的毫无人烟,博主希望路过的小哥哥/小姐姐(几率较小)留下些什么--

  4. C语言教你写个‘浪漫烟花‘---特别漂亮

    效果展示 动态图 总体框架 /***************************************** * 项目名称:浪漫烟花 * 项目描述:贴图 * 项目环境:vs2019 * 生成日期: ...

  5. 『学了就忘』Linux基础 — 7、补充:安装Linxu系统时设置硬盘挂载说明

    目录 (1)新建一个/home分区 (2)再创建一个/boot分区. (3)创建一个swap分区 (4)最后剩余的空间全部分给根目录 (5)总结 上一篇在VMwar虚拟机中安装Linux操作系统中ht ...

  6. NavigationView使用简介

    Android支持直接创建带有NavigationView的Activity,这里主要介绍NavigationView的逻辑. NavigationView通常是跟DrawerLayout一起使用.D ...

  7. 汇编--LDR

    转载:https://my.oschina.net/zengsai/blog/23733 ARM LDR 伪指令的格式: LDR Rn, =expr 如果name是立即数的话LDR R0,=0X123 ...

  8. redis 的主从模式哨兵模式

    原理理解 1,哨兵的作用就是检测redis主服务的状态,如果主服务器挂了,从服务就自动切换为主服务器,变为master.哨兵是一个独立的进程,作为进程,它会独立运行.其原理是哨兵通过发送命令,等待Re ...

  9. springmvc学习笔记(全)

    SpringMVC简介 什么是MVC MVC是一种软件架构的思想,将软件按照模型.视图.控制器来划分 M: Model:模型层,指工程中的JavaBean,作用是处理数据.JavaBean分为两类: ...

  10. 『学了就忘』Linux基础命令 — 34、配置网络相关命令

    目录 1.配置网络常用命令 2.ifconfig命令 3.ping命令 4.netstat 命令 使用1:查看本机开启的端口 使用2:查看本机有哪些程序开启的端口 使用3:查看所有连接 使用4:查看网 ...