# 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. cassandra表中主键的类型

    cassandra表中主键的类型及区分? 一.类型及区分 二.参考文章 一.类型及区分 Cassandra的4种Key Primary Key 主键 Composite Key,Compound Ke ...

  2. 【c++ Prime 学习笔记】第16章 模板与泛型编程

    面向对象编程(OOP)和泛型编程(GP)都能处理在编写程序时类型未知的情况 OOP能处理运行时获取类型的情况 GP能处理编译期可获取类型的情况 标准库的容器.迭代器.算法都是泛型编程 编写泛型程序时独 ...

  3. 新產品SWOT分析實例

    推出新产品需要解决四个行销支柱: 价格 产品 促销 销售地点 要分析这些方面,请检查您的优势.劣势.机会和威胁,以帮助您在运行第一个广告或举行第一次促销之前将风险降至最低,并最大限度地利用资源.SWO ...

  4. skywalking实现分布式系统链路追踪

    一.背景 随着微服务的越来越流行,我们服务之间的调用关系就显得越来越复杂,我们急需一个APM工具来分析系统中存在的各种性能指标问题以及调用关系.目前主流的APM工具有CAT.Zipkin.Pinpoi ...

  5. 洛谷 P3195 [HNOI2008] 玩具装箱

    链接: P3195 题意: 给出 \(n\) 个物品及其权值 \(c\),连续的物品可以放进一个容器,如果将 \(i\sim j\) 的物品放进一个容器,产生的费用是 \(\left(j-i+\sum ...

  6. AGC036 A-Triangle | 构造

    题目链接 题意: 给出一个数$S(1\leqslant S \leqslant 10^{18})$. 要求在平面直角坐标系中找到三个点$(X_1,Y_1),(X_2,Y_2),(X_3,Y_3)$,满 ...

  7. cf13A Numbers(,,)

    题意: Little Petya likes numbers a lot. He found that number 123 in base 16 consists of two digits: th ...

  8. hdu 3887 Counting Offspring(DFS序【非递归】+树状数组)

    题意: N个点形成一棵树.给出根结点P还有树结构的信息. 输出每个点的F[i].F[i]:以i为根的所有子结点中编号比i小的数的个数. 0<n<=10^5 思路: 方法一:直接DFS,进入 ...

  9. Element - 日期禁用集合(持续更新)

    当前日期之前的日期禁用 <el-date-picker v-model="form.startTime" type="date" placeholder= ...

  10. ONVIF协议客户端

    前几天跟大家聊了一些关于ONVIF的一些基础知识,它的工作原理以及优势.今天安徽思蔷信息科技为带大家了解一下simpleonvif 百度云盘下载地址:链接:https://pan.baidu.com/ ...