# 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. 【UE4 调试】C++ 几种编译方法和小技巧

    编译方法 Visual Studio 2019 编译 默认编译 UnrealVS 快速编译 Editor 编译 一般 vs 编译完后,Editor会跟着热编译(有声音) 如果发现编译后代码没更新到Ed ...

  2. Java High Level REST Client 使用地理位置查询

    Java High Level REST Client 使用地理位置查询 一.需求 二.对应的query语句 三.对应java代码 1.引入 jar 包 2.创建 RestHighLevelClien ...

  3. AGC019F

    题目大意 $n$ + $m$ 个问题,其中$n$ 个答案是$YES$,$m$个是$NO$的,你依次答题,每答一道,就可以立刻知道这道题的答案,求在最优策略下答错次数的期望,对$998244353$取模 ...

  4. 8.18考试总结[NOIP模拟43]

    又挂了$80$ 好气哦,但要保持优雅.(草 T1 地衣体 小小的贪心:每次肯定从深度较小的点向深度较大的点转移更优. 模拟一下,把边按链接点的子树最大深度排序,发现实际上只有上一个遍历到的点是对当前考 ...

  5. C语言基础知识总结大全

    1.入门程序 #include <stdio.h> int main() { printf("Hello World!"); return 0; } 2.数据类型 数据 ...

  6. 洛谷 P2221 [HAOI2012]高速公路

    链接: P2221 题意: 有 \(n(1\leq n\leq 10^5)\) 个点,从第 \(i(1\leq i< n)\) 个点向第 \(i+1\) 个点连有边.最初所有边长 \(v_i\) ...

  7. 21.6.23 test

    省选 模拟赛 今天考的是一套题目背景和描述会被[数据删除]的模拟赛. 犯了几个傻逼错. \(T1\) 把两种情况的概率看反了,写的暴力.\(35->5\) pts. \(T2\) 以为想到了正解 ...

  8. Ubuntu用apt安装MySQL

    这里以MySQL5.7为例. # 如果之前有安装旧版,先移除sudo apt-get --purge remove mysql-server mysql-client mysql-common # 安 ...

  9. 汇编--LDR

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

  10. hdu 2190 重建希望小学(数学,递推)

    题意: N*3的教室,有2种砖,2*2.1*1. 问铺设教室的方案有多少种.(要铺满) 思路: 画一下图可以很快发现递推公式 代码: int main(){ int a[35]; mem(a,0); ...