Canvas知识框架
一、Canvas基础
-
核心概念
-
Canvas是位图绘图区域,通过JavaScript(或Python等)动态绘制图形。
-
坐标系:左上角为原点
(0, 0)
,x向右递增,y向下递增。 -
绘图流程:
const canvas = document.getElementById('canvas'); const ctx = canvas.getContext('2d'); // 获取2D渲染上下文
-
-
基本绘图指令
-
路径绘制:
-
beginPath()
开始路径 -
moveTo(x, y)
移动画笔 -
lineTo(x, y)
画线 -
arc(x, y, radius, startAngle, endAngle)
画弧 -
closePath()
闭合路径 -
stroke()
描边 /fill()
填充
-
-
矩形:
-
rect(x, y, width, height)
-
strokeRect()
/fillRect()
-
-
-
样式控制
-
颜色:
strokeStyle
,fillStyle
(支持HEX、RGB、RGBA) -
线宽:
lineWidth
-
线型:
lineCap
(端点样式),lineJoin
(拐角样式) -
阴影:
shadowColor
,shadowBlur
,shadowOffsetX/Y
-
二、高级绘图技术
-
变换与状态管理
-
平移:
translate(x, y)
-
旋转:
rotate(angle)
-
缩放:
scale(sx, sy)
-
状态栈:
save()
和restore()
保存/恢复绘图状态(样式、变换等)。
-
-
图像操作
-
绘制图像:
drawImage(image, x, y, width, height)
-
图像裁剪:
drawImage
的9参数版本。 -
像素操作:
getImageData()
/putImageData()
直接操作像素数据。
-
-
文本绘制
-
fillText(text, x, y)
/strokeText(text, x, y)
-
字体样式:
font
(如'20px Arial'
) -
对齐:
textAlign
,textBaseline
-
-
复合与裁剪
-
全局透明度:
globalAlpha
-
混合模式:
globalCompositeOperation
(如'source-over'
,'lighter'
) -
裁剪路径:
clip()
-
三、动画与交互
-
动画基础
-
使用
requestAnimationFrame
实现帧循环。 -
清除画布:
clearRect(0, 0, width, height)
。 -
示例:移动小球动画。
-
-
事件交互
-
监听鼠标/触摸事件:
canvas.addEventListener('click', (e) => {const x = e.clientX - canvas.offsetLeft;const y = e.clientY - canvas.offsetTop;// 绘制交互图形 });
-
-
性能优化
-
避免频繁重绘(使用离屏Canvas缓存复杂图形)。
-
减少不必要的状态变更(如重复设置样式)。
-
四、常见应用场景
-
游戏开发
-
精灵(Sprite)渲染、碰撞检测、粒子效果。
-
-
数据可视化
-
动态图表、自定义进度条、地图绘制。
-
-
图像处理
-
滤镜(灰度、模糊)、像素级操作(如边缘检测)。
-
-
创意绘图
-
分形图形、生成艺术、手写板。
-
五、扩展知识
-
WebGL(3D Canvas)
-
通过
canvas.getContext('webgl')
进入3D绘图领域。
-
-
Canvas库
-
简化库:
Fabric.js
、Konva.js
、Paper.js
。
-
-
跨平台框架
-
移动端:
React Native Canvas
、Flutter CustomPaint
。
-
六、调试与工具
-
调试技巧
-
使用
console.log
输出绘图状态。 -
检查Canvas尺寸是否被CSS拉伸(需显式设置
width/height
属性)。
-
-
开发工具
-
Chrome开发者工具:检查Canvas元素、捕获帧。
-
七、Python中的Canvas(如Tkinter)
-
Tkinter Canvas
-
基础绘图:
create_line()
,create_rectangle()
,create_oval()
。 -
交互:
bind()
事件绑定(如<Button-1>
)。 -
动画:通过
after()
定时更新。
-
学习建议
-
动手实践:从简单图形(如时钟、贪吃蛇)开始。
-
参考文档:
-
MDN Canvas教程
-
Tkinter官方文档(Python方向)。
-
通过掌握以上框架,你可以逐步深入Canvas的各类应用场景,结合项目需求灵活运用绘图技术。