Canvas图形

news/2024/10/23 4:49:27/

Canvas


canvas 是一个可以使用脚本(通常为JavaScript)来绘制图形的 HTML 元素。

Canvas API 提供了一个通过JavaScript 和 HTML的Canvas元素来绘制图形的方式。
它可以用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。

Canvas API 主要聚焦于2D图形。而同样使用Canvas元素的 WebGL API 则用于绘制硬件加速的2D和3D图形。


Canvas使用

Canvas 最早是由 Apple 引入 WebKit,用于Mac OS X 的 Dashboard,随后被各个浏览器实现。

如今除一些过时的浏览器不支持Canvas元素外,所有的新版本主流浏览器都支持它。


<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>canvas 基本使用</title>
</head>
<body><canvas id="canvas" width="200" height="200">当前浏览器不支持canvas元素,请升级或更换浏览器!</canvas><script>// 获取 canvas 元素var canvas = document.getElementById('canvas');// 通过判断getContext方法是否存在来判断浏览器的支持性if(canvas.getContext) {// 获取绘图上下文var ctx = canvas.getContext('2d');}</script>
</body>
</html>

通过 getContext()来获取绘图上下文和绘制功能,接收参数,它是绘图上下文的类型,可能的参数有:

  • 2d:建立一个二维渲染上下文。这种情况可以用 CanvasRenderingContext2D()来替换getContext('2d')
  • webgl(或 experimental-webgl): 创建一个WebGLRenderingContext 三维渲染上下文对象。只在实现WebGL 版本1(OpenGL ES 2.0)的浏览器上可用。
  • webgl2(或 experimental-webgl2):创建一个 WebGL2RenderingContext 三维渲染上下文对象。只在实现 WebGL 版本2 (OpenGL ES 3.0)的浏览器上可用。
  • bitmaprenderer:创建一个只提供将canvas内容替换为指定ImageBitmap功能的ImageBitmapRenderingContext



绘制直线


moveTo(x, y)
设置初始位置,参数为初始位置x和y的坐标点

lineTo(x, y)
绘制一条从初始位置到指定位置的直线,参数为指定位置x和y的坐标点

stroke()
通过线条来绘制图形轮廓

fill()
填充绘制图形

// 获取 canvas 元素var canvas = document.getElementById('canvas');// 通过判断getContext方法是否存在来判断浏览器的支持性if(canvas.getContext) {// 获取绘图上下文var ctx = canvas.getContext('2d');ctx.moveTo(200, 200)ctx.lineTo(300, 300)ctx.lineTo(100, 300)ctx.lineTo(200, 200)ctx.stroke()}

绘制矩形

strokeRect(x, y, width, height)
绘制一个矩形的边框

fillRect(x, y, width, height)
绘制一个填充的矩形

clearRect(x, y, width, height)
清除指定矩形区域,让清除部分完全透明。

// 获取 canvas 元素var canvas = document.getElementById('canvas');// 通过判断getContext方法是否存在来判断浏览器的支持性if(canvas.getContext) {// 获取绘图上下文var ctx = canvas.getContext('2d');// 矩形ctx.strokeRect(200, 200, 100, 200)// 填充矩形ctx.fillRect(200, 200, 100, 200)// 透明矩形 清除指定矩形区域,让清除部分完全透明ctx.clearRect(200, 200, 10, 20)}

绘制圆弧

绘制圆弧或者圆,使用的方法是:arc(x, y, radius, startAngle, endAngle, anticlockwise)

x和Y为圆心的坐标
radius为半径
startAngle为圆弧或圆的开始位置
endAngle为圆弧或圆的结束位置
anticlockwise是绘制的方向(不写默认为false,从顺时针方向)

    ctx.arc(200, 200, 50, 0, 2 * Math.PI, false)ctx.stroke()ctx.arc(400, 400, 50, 0, Math.PI, false)ctx.fill()

绘制椭圆

添加椭圆路径。语法:ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)

x、y为椭圆的圆心位置
radiusX、radiusY 为x轴和y轴的半径
rotation:椭圆的旋转角度,以弧度表示
startAngle:开始绘制点
endAngle:结束绘制点
anticlockwise:绘制的方向(默认顺时针),可选参数。

   ctx.ellipse(200, 200, 200, 100, 0, 0, 2 * Math.PI, false)ctx.fill()

路径闭合

当连续绘制多个图形时会出现图形连接到一起的情况

beginPath()
路径开始

closePath()
路径闭合

在绘制图形时closePath()可以省略,在开始绘制时重新beginPath()即可将图形分离开


贝塞尔曲线

二次

二次贝塞尔曲线 quadraticCurveTo(cp1x, cp1y, x, y)
先设置起点 然后是cp1x,cp1y控制点 x,y结束点

	ctx.beginPath()ctx.moveTo(200, 200)ctx.quadraticCurveTo(300, 300, 100, 350)ctx.stroke()// 三次贝塞尔曲线 bezierCurveTo(cp1x,cp1y, cp2x,cp2y, x, y) 先设置起点 然后是cp1x,cp1y控制点 cp2x,cp2y控制点2  x,y结束点// ctx.beginPath()// ctx.moveTo(200, 200)// ctx.bezierCurveTo(100,100, 300,300, 400, 200)// ctx.stroke()

三次

三次贝塞尔曲线 bezierCurveTo(cp1x,cp1y, cp2x,cp2y, x, y)
先设置起点 然后是cp1x,cp1y控制点 cp2x,cp2y控制点2 x,y结束点

	ctx.beginPath()ctx.moveTo(200, 200)ctx.bezierCurveTo(100,100, 300,300, 400, 200)ctx.stroke()


http://www.ppmy.cn/news/574878.html

相关文章

绘图方式:形状绘图

形状绘图 绘图的方式有两种&#xff1a;形状绘图和几何绘图 今天先和大家分享形状绘图 1.直线 直线是最简单的图形。使用X1、Y1两个属性可以设置它的坐标起点&#xff0c;X2&#xff0c;Y2两个属性则用来设置其终点坐标。控制起点/终点坐标就可以实现平行、交错等效果 2.矩形 矩…

二维图形几何变换(计算机图形学)

说明&#xff1a;本实验代码在vs2022下可正常运行&#xff0c;本实验适配于计算机图形学新版&#xff08;VC MFC &#xff09;第二版 1.实验目的 1&#xff09;掌握3*3矩阵乘法运算的编程实现 2&#xff09;掌握平移&#xff0c;比例&#xff0c;旋转三种基本二维几何变换矩…

计算机图形学 | 欢迎来到图形世界

计算机图形学 | 欢迎来到图形世界 计算机图形学 | 欢迎来到图形世界1.1 初识图形学计算机图形学相关学科发展历史 1.2 探秘图形应用与研究有趣的图形应用计算机辅助设计&#xff08;Computer-Aided Design&#xff09;&#xff1a;虚拟现实环境&#xff08;Virtual-Reality Env…

关于图形的绘制

import matplotlib.pyplot as plt #导入绘图第三方库 plt.plot([4,1,5,3]) plt.savefig(test1,dpi600) #存储图形文件 plt.savefig(../picture/test1,dpi600) plt.axis(equal) plt.show() import matplotlib.pyplot as plt #导入绘图第三方库 plt.plot([4,1,4,4,3,5,…

【XJTUSE计算机图形学】第三章 几何造型技术(1)——参数曲线和曲面

文章目录 【XJTUSE计算机图形学】第三章 几何造型技术(1)——参数曲线和曲面参数曲线和曲面曲线曲面参数表示非参数表示参数表示 曲线的基本概念插值、拟合和光顺(掌握概念)参数化概念参数化常用方法参数区间的规格化 参数曲线的代数和几何形式(了解一下)代数形式几何形式 连续…

【图形学】04 数学部分(四、放射变换)

文章目录 1、线性变换2、仿射变换3、张成空间4、对于齐次坐标的理解n、多边形重心的推论 1、线性变换 线性变换从几何直观有三个要点&#xff1a; 变换前是直线的&#xff0c;变换后依然是直线直线比例保持不变变换前是原点的&#xff0c;变换后依然是原点 比如说旋转&#x…

Matplotlib还能这么画!(附25个案例详细代码)

作者&#xff1a;zsx_yiyiyi 编辑&#xff1a;python大本营 大家好&#xff0c;今天分享给大家25个Matplotlib图的汇总&#xff0c;在数据分析和可视化中非常有用&#xff0c;文章较长&#xff0c;可以收藏下来慢慢练手。 # !pip install brewer2mpl import numpy as np import…

计算机基础:图形、图像相关知识笔记

1、图形、图像的基础知识 图形&#xff1a;由称为矢量的数学对象所定义的直线和曲线等组成。 图像&#xff1a;也称为栅格图像&#xff0c;由点阵图或位图图像、用像素来代表图像。每一个像素都被分配一个特点的位置和颜色值。 图形和图像之间在一定条件下可以互相转换&#xf…