canvas入门教程-附demo 2021-08-31 一、canvas简介 canvas(“画布”)本身是HTML5提供的一种新标签, 标签本身只是图形容器,需要通过脚本 (通常是JavaScript)可以进行图形的绘制(canvas有多种绘制路径、矩形、圆形、字符以及添加图像的方法)。 canvas目前主要可以应用于游戏、数据可视化、图片的操作等领域。 二、canvas基础用法 1.canvas标签 canvas标签可以说是我们绘制的容器,内容的绘制我们需要依靠canvas的context对象来实现,标签有两个自有的属性width和height,用来规定画布的宽高, 标签支持 HTML 的全局属性,另外我们可以在标签中嵌入后备内容,在不支持的设备上让用户了解当前内容。 您的浏览器不支持canvas,请更换浏览器。 2.canvas的坐标系 在进行绘制操作前我们还需要了解一下canvas的坐标 文章图片 3.基本api context:canvas的上下文、绘制环境,所有操作的api都是基于context,我们需要通过js来操作context来进行绘制,可以结合注释进行学习 从下面的代码中我们可以学习如何进行文字、线段、矩形、圆形等基本图形的绘制 const canvasDom = document.getElementById('myCanvas') // 获取画布元素 const ctx = canvasDom.getContext('2d') // 获取canvas对象 2D绘图的上下文 ctx.font = '38px Arial' // 文本相关设置 ctx.fillStyle = 'orange' // 填充色 ctx.fillText('一些基础图形', 320, 300) // 绘制填充的文本 ctx.fillRect(50, 198, 50, 104) // 绘制矩形ctx.beginPath() // 绘制路径开始 ctx.lineWidth = 3 // 线条宽度 ctx.strokeStyle = 'red' // 填充色 ctx.moveTo(100, 200) // 绘制起点(x, y) ctx.lineTo(300, 300) // 绘制直线(x,y) ctx.lineTo(100, 300) ctx.closePath() // 绘制路径闭合 闭合路径会自动把结束的点和开始的线连在一起 ctx.stroke() // 绘制线段ctx.beginPath() ctx.lineWidth = 16 ctx.strokeStyle = 'blue' ctx.fillStyle = 'green' // 绘制圆形 圆心坐标 半径长度 初始角度 结束角度 顺时针、逆时针绘制 // (x,y,r,sAngle,eAngle,counterclockwise) ctx.arc(220, 194, 50, 0, 1 * Math.PI, false) ctx.stroke() ctx.fill() // 是将闭合的路径的内容进行填充 ctx.beginPath() ctx.strokeStyle = 'green' ctx.fillStyle = 'blue' ctx.arc(220, 194, 50, 0, 1 * Math.PI, true) ctx.stroke() ctx.fill() ctx.beginPath() ctx.fillStyle = 'red' ctx.lineWidth = 2 ctx.rect(110, 240, 50, 50) // 绘制矩形 (x, y, width, height) ctx.stroke() ctx.fill() 运行效果如图: 文章图片 最后我们可以使用clearRect进行清除操作,可以实现涂鸦的橡皮擦也可以整个画面做清空操作参数和绘制矩形一样 坐标以及清除的长宽(x, y, width, hegiht) ctx.clearRect(110, 240, 20, 20) // 清除局部 ctx.clearRect(0, 0, 800, 800) // 初始点坐标 加容器宽高 清除全部 文章图片 图片的绘制会在下面案例进行讲解 三、canvas基础案例 1.图片的放大旋转 绘制图片需要使用drawImage方法 drawImage(img,sx,sy,swidth,sheight,x,y,width,height) 参数 说明 是否必须 img 规定要使用的图像、画布或视频 是 sx 开始剪切的 x 坐标位置 否 sy 开始剪切的 y 坐标位置 否 swidth 被剪切图像的宽度 否 sheight 被剪切图像的高度 否 x 在画布上放置图像的 x 坐标位置 是 y 在画布上放置图像的 y 坐标位置 是 width 要使用的图像的宽度 否 height 要使用的图像的高度 否 下面我们结合实例看一下 您的浏览器不支持canvas,请更换浏览器 您的浏览器不支持canvas,请更换浏览器 旋转 rotate 文章图片 2.本地压缩图片下载&&常规文件格式体积限制 文章图片 3.解决canvas转图片不清晰 在开发中我曾经遇到了绘制的图片看起来十分的模糊,实际上是画布尺寸与画布范围内实际像素不一致造成。为了解决这个问题,优化用户体验我才用的方案是直接解决canvas转图片不清晰,直接容器宽高*2处理的 const canvas = document.getElementById('canvas') canvas.style.backgroundColor = '#FFF' canvas.style.width = _width + 'px' canvas.style.height = _height + 'px' canvas.width = _width * 2 canvas.height = _height * 2 更优的方案应该是根据设备的dpr去做 const canvas = document.getElementById('canvas') const dpr = (scale = window.devicePixelRatio || 1) const rect = canvas.getBoundingClientRect() canvas.width = rect.width * dpr canvas.height = rect.height * dpr canvas.style.width = rect.width + 'px' canvas.style.height = rect.height + 'px' 处理前 文章图片 处理后 文章图片 4.最后附上一个小效果 您的浏览器不支持canvas,请更换浏览器 文章图片 四、浏览器支持 canvas的基础支持基本覆盖当前主流浏览器 canvas在移动端的兼容情况非常不错 IE9以下浏览器可以考虑使用 Explorercanvas 文章图片 *目前3D(WebGL)和2D在一些老版本浏览器兼容有所不同 文章图片 文章图片 【canvas入门教程-附demo】更多相关支持可以查看 caniuse 五、第三方库推荐 IE9以下浏览器使用canvas Explorercanvas echart 可视化图表库 paperjs 矢量图形脚本框架 pixijs 2D sprite渲染引擎 推荐阅读 网保 轻松解决打印机故障,省下大量维修费用 佳能打印机3480清零软件下载指南 夏天米饭放电饭煲里放一夜会坏吗 LOJ#6511. 「雅礼集训 2018 Day8」B【线性规划对偶问题,费用流】 火龙果树种植方法和技术 火龙果树的种植方法 图片提取文字软件,有什么可以把图片转化成字符的软件 纯梨膏好还是加了中药的好 霖怎么读音 霖怎么读音正确 如何连接政务服务器? 政务服务器怎么连接 广西中小学教育质量在全国处于什么水平? mysql怎么run mysql弄好怎么用 秋葵要焯水多长时间 四川盐城在哪里 盐城市在哪里 北京最低月工资标准2020最新 2022年北京市月最低工资标准表 redis 查询语句 redis快速查询姓名 新闻文本分析 老凤祥999纯银今日价 银价格 噢噢噢噢噢是什么歌中文 噢噢噢噢噢是什么歌 宝宝几个月添加辅食 宝宝添加辅食注意事项 饺子沸腾还要煮多久才熟 饺子沸腾还要煮多久才熟透 canvas(一)基本用法 通过复盘快速成长(附模板) 国家重点支持的高新技术领域(一) vue|vue canvas 手绘进度条动画 那些经常打开附近人的女人,都是什么心理() 机器学习-5|机器学习-5 朴素贝叶斯【附代码】 canvas不过如此(一) 《触诊与评估技巧》 HTML|HTML canvas中translate()与rotate()的理解 昆明附近,不是花中偏爱菊,此花开过更无花,骑行花海你见过吗()