今天接到粉丝私信,询问是否可以通过Canvas绘制一些图形,然后根据粉丝提供的模板图,通过Canvas进行模拟绘制,通过分析发现,图形虽然相对简单,但是如果不借助相应的软件,纯代码绘制还是稍微费些时间。今天将绘制图形源码分享出来,仅供学习分享之用,如有不足之处,还请指正。

什么是Canvas?

Canvas表示一个图形容器(称之为画布),可以使用脚本来绘制图形。

Canvas坐标

canvas 是一个二维网格。canvas 的左上角坐标为 (0,0)。如下图所示,画布的 X 和 Y 坐标用于在画布上对绘画进行定位。鼠标移动的矩形框上,显示定位坐标。

Canvas接口

Canvas默认提供了简单图形绘制功能,如直线,矩形,圆弧,贝塞尔曲线等,通过接口可以绘制简单的图形,复杂的图形需要通过简单的图形进行不同组合来实现。

具体可参考:https://www.w3school.com.cn/jsref/dom_obj_canvas.asp

需求原图

首先看下粉丝发来的原图,其中红框内容的图形相对稍微有点复杂,如下所示:

Canvas绘制图

通过Canvas绘制相应图形,效果如下所示:

Canvas绘制源码

首先创建Canvas画图容器,通过canvas标签进行创建。每一个图形用一个容器进行创建,相互独立,如下所示:

<canvas id="bigHeadCanvas" width="150" height="150"></canvas>
<canvas id="circleCanvas" width="150" height="150"></canvas>
<canvas id="fishCanvas" width="150" height="150"></canvas>
<canvas id="heartCanvas" width="150" height="150"></canvas>
<canvas id="pandaCanvas" width="150" height="150"></canvas>
<canvas id="sunFlowerCanvas" width="150" height="150"></canvas>
<canvas id="fiveStarCanvas" width="150" height="150"></canvas>
<canvas id="catCanvas" width="150" height="150"></canvas>
<canvas id="foxCanvas" width="150" height="150"></canvas>
<canvas id="appleCanvas" width="150" height="150"></canvas>
<canvas id="rectCanvas" width="150" height="150"></canvas>
<canvas id="sixCanvas" width="150" height="150"></canvas>
<canvas id="diamondCanvas" width="150" height="150"></canvas>
<canvas id="circleRectCanvas" width="150" height="150"></canvas>
<canvas id="eggCanvas" width="150" height="150"></canvas>

1. 绘制大头熊

绘制大头熊,代码如下所示:

function drawBigHead(){var c = document.getElementById("bigHeadCanvas");var ctx = c.getContext("2d");ctx.beginPath();ctx.arc(50,50,50,Math.PI*1.85,Math.PI*1.15);ctx.stroke();ctx.beginPath();ctx.arc(50,50,45,Math.PI*1.35,Math.PI*1.68);ctx.stroke();ctx.beginPath();ctx.arc(17,17,15,Math.PI*0.7,Math.PI*1.8);//左耳ctx.stroke();ctx.beginPath();ctx.arc(87,17,15,Math.PI*1.15,Math.PI*0.3);//右耳ctx.stroke();ctx.font="12px Airal";ctx.strokeText('大头熊形',30,130);
}
注意:前两句为创建Canvas上下文对象,先获取画布控件,再创建对象,然后就可以利用对象创建图形。

2. 绘制圆形

绘制圆形图案,如下所示:

function drawCircle(){var c = document.getElementById("circleCanvas");var ctx = c.getContext("2d");ctx.arc(55,55,50,Math.PI*0,Math.PI*2);ctx.stroke();ctx.font="12px Airal";ctx.strokeText('圆形',35,130);
}

3. 绘制鱼形

绘制鱼形,如下所示:

function drawFish(){var c = document.getElementById("fishCanvas");var ctx = c.getContext("2d");ctx.beginPath();ctx.arc(56,52,52,Math.PI*0.75,Math.PI*1.44);ctx.stroke();ctx.beginPath();ctx.arc(32,52,52,Math.PI*1.57,Math.PI*0.25);ctx.stroke();ctx.beginPath();ctx.arc(42,135,32,Math.PI*1.30,Math.PI*1.70);ctx.stroke();ctx.beginPath();ctx.arc(17,105,8,Math.PI*0.15,Math.PI*1.3);ctx.lineTo(20,88);ctx.stroke();ctx.beginPath();ctx.arc(67,105,8,Math.PI*0.88,Math.PI*1.75,true);ctx.lineTo(70,88);ctx.stroke();ctx.font="12px Airal";ctx.strokeText('鱼形',28,130);
}

4. 绘制心形

绘制心形图案,如下所示:

function drawHeart(){var c = document.getElementById("heartCanvas");var ctx = c.getContext("2d");ctx.arc(36,26,20,Math.PI*0.75,Math.PI*1.75);ctx.lineTo(60,25);ctx.lineTo(70,10);ctx.stroke();ctx.beginPath();ctx.arc(83,26,20,Math.PI*1.25,Math.PI*0.25);ctx.stroke();ctx.beginPath();ctx.moveTo(21,40);ctx.lineTo(60,90);ctx.lineTo(98,40);ctx.stroke();ctx.font="12px Airal";ctx.strokeText('心形',45,130);
}

5. 绘制大熊形

绘制大熊形,代码如下所示:

function drawPanda(){var c = document.getElementById("pandaCanvas");var ctx = c.getContext("2d");//上ctx.arc(18,15,15,Math.PI*0.75,Math.PI*1.85);ctx.stroke();ctx.beginPath();ctx.arc(80,15,15,Math.PI*1.13,Math.PI*0.20);ctx.lineTo(88,39);ctx.stroke();ctx.beginPath();ctx.arc(48,75,70,Math.PI*1.42,Math.PI*1.59);ctx.stroke();//中ctx.beginPath();ctx.arc(30,55,28,Math.PI*0.75,Math.PI*1.25);ctx.lineTo(6,23);ctx.stroke();ctx.beginPath();ctx.arc(66,55,28,Math.PI*1.78,Math.PI*0.25);ctx.lineTo(80,88);ctx.stroke();//下ctx.beginPath();ctx.arc(25,93,12,Math.PI*0.27,Math.PI*1.20);ctx.lineTo(10,74);ctx.stroke();ctx.beginPath();ctx.arc(70,93,12,Math.PI*1.83,Math.PI*0.73);ctx.stroke();ctx.beginPath();ctx.arc(47,135,35,Math.PI*1.35,Math.PI*1.65);ctx.stroke();ctx.font="12px Airal";ctx.strokeText('大熊形',33,130);
}

6. 绘制太阳花

绘制太阳花,代码如下所示:

function drawSunFlower(){var c = document.getElementById("sunFlowerCanvas");var ctx = c.getContext("2d");var startX=2;var startY=2;var radius=15;//上ctx.beginPath();ctx.arc(startX+4*radius,startY+1.5*radius,radius,Math.PI*1,Math.PI*0);ctx.stroke();//下ctx.beginPath();ctx.arc(startX+4*radius,startY+6.3*radius,radius,Math.PI*0,Math.PI*1);ctx.stroke();//左ctx.beginPath();ctx.arc(startX+1.5*radius,startY+4.0*radius,radius,Math.PI*0.4,Math.PI*1.6);ctx.stroke();//右ctx.beginPath();ctx.arc(startX+6.2*radius,startY+4*radius,radius,Math.PI*0.5,Math.PI*1.5,true);ctx.stroke();//上右ctx.beginPath();ctx.arc(startX+5.7*radius,startY+2.1*radius,radius,Math.PI*1.20,Math.PI*0.40);ctx.stroke();//上左ctx.beginPath();ctx.arc(startX+2.0*radius,startY+2.0*radius,radius,Math.PI*1.9,Math.PI*0.60,true);ctx.stroke();//下左ctx.beginPath();ctx.arc(startX+2.0*radius,startY+6.0*radius,radius,Math.PI*0,Math.PI*1.38);ctx.stroke();//下右ctx.beginPath();ctx.arc(startX+5.8*radius,startY+5.8*radius,radius,Math.PI*0.78,Math.PI*1.58,true);ctx.stroke();ctx.font="12px Airal";ctx.strokeText('太阳花形',35,130);
}

7. 绘制五角星

绘制五角星形,如下所示:

function drawFiveStar(){var c = document.getElementById("fiveStarCanvas");var ctx = c.getContext("2d");ctx.moveTo(30,20);ctx.beginPath();ctx.lineTo(50,0);//顶ctx.lineTo(70,20);ctx.lineTo(100,30);ctx.lineTo(85,60);ctx.lineTo(80,90);ctx.lineTo(50,80);//底ctx.lineTo(20,90);ctx.lineTo(15,60);ctx.lineTo(0,30);ctx.lineTo(30,20);ctx.closePath();ctx.stroke();ctx.font="12px Airal";ctx.strokeText('五角星',33,130);
}

8. 绘制猫咪头

绘制猫咪头形状,代码如下所示:

function drawCat(){var c = document.getElementById("catCanvas");var ctx = c.getContext("2d");ctx.beginPath();ctx.arc(60,75,60,Math.PI*1.42,Math.PI*1.58);//顶ctx.stroke();ctx.beginPath();ctx.arc(60,55,50,Math.PI*0.64,Math.PI*1.2);//左下ctx.stroke();ctx.beginPath();ctx.arc(55,55,50,Math.PI*1.82,Math.PI*0.38);//右下ctx.stroke();ctx.beginPath();ctx.arc(55,140,45,Math.PI*1.35,Math.PI*1.65);//下ctx.stroke();ctx.beginPath();ctx.arc(65,20,45,Math.PI*0.95,Math.PI*1.35);//左耳下ctx.stroke();ctx.beginPath();ctx.arc(10,45,45,Math.PI*1.6,Math.PI*1.8);//左耳上ctx.stroke();ctx.beginPath();ctx.arc(115,60,60,Math.PI*1.25,Math.PI*1.40);//右耳上ctx.stroke();ctx.beginPath();ctx.arc(55,15,45,Math.PI*1.90,Math.PI*0.12);//右耳下ctx.stroke();ctx.font="12px Airal";ctx.strokeText('猫咪头形',33,130);
}

9. 绘制狐狸头

绘制狐狸头形状,代码如下所示:

function drawFox(){var c = document.getElementById("foxCanvas");var ctx = c.getContext("2d");ctx.beginPath();ctx.arc(60,75,60,Math.PI*1.45,Math.PI*1.55);//顶ctx.stroke();ctx.beginPath();ctx.arc(70,20,45,Math.PI*0.95,Math.PI*1.35);//左耳下ctx.stroke();ctx.beginPath();ctx.arc(15,45,45,Math.PI*1.6,Math.PI*1.8);//左耳上ctx.stroke();ctx.beginPath();ctx.arc(110,60,60,Math.PI*1.25,Math.PI*1.40);//右耳上ctx.stroke();ctx.beginPath();ctx.arc(50,15,45,Math.PI*1.90,Math.PI*0.12);//右耳下ctx.stroke();ctx.beginPath();ctx.arc(60,50,40,Math.PI*0.4,Math.PI*0.6); //底部ctx.lineTo(45,80); //左脸ctx.lineTo(2,50);ctx.lineTo(26,27);ctx.stroke();ctx.beginPath();ctx.moveTo(92,30);//右脸ctx.lineTo(115,50);ctx.lineTo(75,80);ctx.lineTo(70,90);ctx.stroke();ctx.font="12px Airal";ctx.strokeText('狐狸头形',33,130);
}

10. 绘制苹果

绘制苹果形状,代码如下所示:

function drawApple(){var c = document.getElementById("appleCanvas");var ctx = c.getContext("2d");var img = new Image();img.width=100;img.height=100;img.src="apple.png";var id=setTimeout(function(){//console.log("超时执行");if(img.complete){ctx.drawImage(img, 10, 10,100,100);clearTimeout(id);}},100);ctx.font="12px Airal";ctx.strokeText('苹果形',35,130);
}

注意,Canvas不仅可以绘制图形,也可以添加图像元素。由于苹果图形相对复杂,所以采用绘制Image对象的方式进行绘制。

11. 绘制矩形

绘制矩形,代码如下所示:

function drawRect(){var c = document.getElementById("rectCanvas");var ctx = c.getContext("2d");ctx.rect(10,10,100,80);ctx.stroke();ctx.font="12px Airal";ctx.strokeText('圆形',35,130);
}

12. 绘制六边形

绘制六边形,如下所示:

function drawSix(){var c = document.getElementById("sixCanvas");var ctx = c.getContext("2d");ctx.beginPath();var centerX=50;var centerY=50;var radius=50;ctx.moveTo(centerX+radius*Math.cos(Math.PI*0),centerY+radius*Math.sin(Math.PI*0));for(var i=0;i<5;i++){ctx.lineTo(centerX+radius*Math.cos(Math.PI*(i+1)*(1/3)),centerY+radius*Math.sin(Math.PI*(i+1)*(1/3)));}ctx.closePath();ctx.stroke();ctx.font="12px Airal";ctx.strokeText('六边形',35,130);
}

注意:六边形相当于将圆进行六平分,取六个顶点进行连线,所以此处采用for循环进行绘制。

13. 绘制钻石

绘制钻石形,如下所示:

function drawDiamond(){var c = document.getElementById("diamondCanvas");var ctx = c.getContext("2d");ctx.beginPath();ctx.moveTo(20,5);ctx.lineTo(90,5);ctx.lineTo(110,35);ctx.lineTo(55,100);ctx.lineTo(0,35);ctx.closePath();ctx.stroke();ctx.font="12px Airal";ctx.strokeText('钻石形',33,130);}

14. 绘制侧角长条形

绘制侧角长条形,代码如下所示:

function drawCircleRect(){var c = document.getElementById("circleRectCanvas");var ctx = c.getContext("2d");var centerX=20;var centerY=5;ctx.beginPath();ctx.moveTo(centerX+ 15,centerY+ 5);ctx.lineTo(centerX+60,centerY+ 5);ctx.lineTo(centerX+60,centerY+ 80);ctx.arc(centerX+50,centerY+ 80,10,Math.PI*0,Math.PI*0.5);ctx.lineTo(centerX+5,centerY+ 90);ctx.lineTo(centerX+5,centerY+ 15)ctx.arc(centerX+15,centerY+ 15,10,Math.PI*1,Math.PI*1.5);ctx.closePath();ctx.stroke();ctx.font="12px Airal";ctx.strokeText('侧角长条形',30,130);
}

15. 绘制鸡蛋

绘制鸡蛋形,如下所示:

function drawEgg(){var c = document.getElementById("eggCanvas");var ctx = c.getContext("2d");ctx.rotate(10*Math.PI/180);var centerX=40;var centerY=2;ctx.beginPath();ctx.arc(centerX+30,centerY+ 60,30,Math.PI*0,Math.PI*1);ctx.lineTo(centerX+15,centerY+ 25);ctx.arc(centerX+35,centerY+ 25,20,Math.PI*1,Math.PI*0);ctx.lineTo(centerX+60,centerY+ 60);ctx.closePath();ctx.stroke();ctx.rotate(-10*Math.PI/180);ctx.font="12px Airal";ctx.strokeText('鸡蛋形',30,130);
}

注意:因为鸡蛋形有点倾斜,所以绘制的时候进行了旋转。

以上就是Html中利用Canvas进行绘制图形的全部内容。

Html利用Canvas绘制图形相关推荐

  1. HTML5利用Canvas绘制图形(Canvas基本知识、绘制矩形、使用路径和图形组合)

    绘制图形有很多方法,可以借助Flash实现,也可以使用SVG和VML来绘图.本次将要学习一种新的灰土方法--使用Canvas元素,它是基于HTML5原生的绘图功能.使用Canvas元素,可以绘制图形, ...

  2. HTML5利用Canvas绘制图形(绘制渐变、模式、变换)

    绘制渐变 渐变是一种很普遍的视觉形象,能带来视觉上的舒适感.在Canvas中,绘图API提供了两个原生的渐变方法,包括线性渐变和径向渐变.渐变,在颜色集上使用逐步抽样的算法,可以应用的描边样式和填充样 ...

  3. html5绘制图形幸运大转盘,微信小程序利用canvas 绘制幸运大转盘功能

    小程序对 canvas api 跟h5的不太一致 ,所以这个搞的比较久,不多说,先贴代码 Page({ /** * 页面的初始数据 */ data: { awardsConfig: {}, resta ...

  4. android 自定义多边形,Android:自定义view之Canvas绘制图形

    前面讲解了onMeasure,接下来讲解onDraw,onDraw主要就是绘制,也就是我们真正关心的部分,使用的是Canvas绘图. @Override protected void onDraw(C ...

  5. canvas绘制图形API(一)

    canvas元素的基础知识 canvas元素是HTML5中的一个新增的重要元素,专门用来绘制图形.在页面上放置一个canvas元素,就相当于在页面上放置了一块"画布",可以在其中进 ...

  6. html5 canvas绘制图形,html5 Canvas绘制图形入门详解

    html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome. ...

  7. 利用canvas绘制电子证书

    利用canvas绘制电子证书 <canvas>标签是HTML中的一个图形容器,其实你也可以把它理解成为一个程序员的画图工具,它只要提供的是2D绘制功能.我们可以通过利用JavaScript ...

  8. - Canvas 简介- 使用 Canvas 绘制图形- Canvas 常用方法- SVG 简介- 使用 SVG 绘制基本图形

    1 Canvas 简介 Canvas 表示画布,现实生活中的画布是用来作画的. HTML5 中的 Canvas :我们可以称它为"网页中的画布".默认情况下,Canvas 是一块 ...

  9. html5 canvas 椭圆,html5中怎么利用Canvas绘制椭圆

    html5中怎么利用Canvas绘制椭圆 发布时间:2021-07-08 16:32:10 来源:亿速云 阅读:58 作者:Leah html5中怎么利用Canvas绘制椭圆,针对这个问题,这篇文章详 ...

  10. 小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像)

    小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像) 微信小程序生成特色头像,海报等是比较常见的.下面我来介绍下实现该类小程序的过程. 首先选择前端来通过 canvas 绘制.这样比较节 ...

最新文章

  1. JDBC连接Oracle数据库测试
  2. 扩增子分析QIIME. 3以管理员安装QIIME1.9.1至Ubuntu16.04
  3. Protobuf序列化的原理-总结
  4. 电脑维修:电脑维修必备工具整理
  5. 根据企业财务进行风险分析——基于pytorch
  6. 中livechart显示大数据_Kaggle 大数据竞赛中的Tricks总结
  7. 演练nerddinner 问题
  8. 【Code Tools】AB性能测试工具(二)
  9. 多媒体个人计算机硬件,A.对个人计算机增加多媒体功能所需软硬件进行最低标准.PDF...
  10. 新点软件怎么导入清单_新点清单造价怎么导入电脑桌面上
  11. 对于基金定投,以月、周、天为单位,哪个更好?
  12. 【自动驾驶感知领域目前研究热点】
  13. S7-1200添加CALCULATE 指令
  14. 以post的方式发请求,传参在url中
  15. Java从小白到大牛第1篇 Java基础-关东升-专题视频课程
  16. 如何将C 项目部署到云服务器上,如何将C 应用程序放在云服务器上
  17. 超实用, 程序员,提升英文阅读能力
  18. 20221228英语学习
  19. 多媒体计算机设备使用注意,多媒体教学设备使用管理制度
  20. arcgis不闭合线转面_如何将ArcGIS不闭合线转化为面:编辑拓扑

热门文章

  1. 使用搜索引擎的一些技巧
  2. 更改jenkins插件地址为国内镜像源
  3. X-MATA市场藏品价格查询插件/QQ机器人框架
  4. 解决Chrome谷歌浏览器访问网页过慢问题~
  5. window10 pro下载
  6. ros订阅相机深度信息_rosbag使用--记录深度相机数据
  7. [日常] NOIp 2018 滚粗记
  8. 中央处理器的体系结构
  9. airplay协议简述
  10. 单片机的c语言程序设计考试题,山科大-《单片机的C语言程序设计与运用(第2版)》期末复习题和答案1...