canvas常用API介绍
官方文档:https://www.canvasapi.cn/
1. Canvas API
Canvas API
提供了一个通过JavaScript
和 HTML
的<canvas>
元素来绘制图形的方式。它可以用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。
在html里的形式是:
<canvas id="canvas"></canvas>
js里:Document.getElementById()
方法获取HTML <canvas>
元素的引用。接着,HTMLCanvasElement.getContext()
方法获取这个元素的context
——图像稍后将在此被渲染。
2. <canvas>
<canvas>
元素可被用来通过JavaScript
(Canvas API
或 WebGL API
)绘制图形及图形动画。
canvas元素的属性:
属性名 | 含义 | 值 |
---|---|---|
height | 该元素占用空间的高度 | 以 CSS 像素(px)表示,默认为 150 |
width | 该元素占用空间的宽度 | 以 CSS 像素(px)表示,默认为 300 |
getContext() | ||
toDataURL(type, encoderOptions) | 返回一个数据URL,该URL包含由类型参数指定的格式的图像(默认为png) | encoderOptions在指定图片格式为 image/jpeg 或 image/webp的情况下,可以从 0 到 1 的区间内选择图片的质量 |
toBlob(callback, type, encoderOptions) | 回调函数,可获得一个单独的Blob对象参数 | 其余两个参数含义同上 |
注意
- 需要有闭合标签
- 直接在html标签中设置width和height属性或者使用JavaScript来指定画布尺寸
- 使用CSS的width和height以在渲染期间缩放图像以适应样式大小,只是让画布缩放而已。
3. CanvasRenderingContext2D
通过HTMLCanvasElement.getContext('2d')
方法可以获得CanvasRenderingContext2D
对象;
可为<canvas>
元素的绘图表面提供2D渲染上下文。 它用于绘制形状,文本,图像和其他对象。
// html
<canvas id="my-house" width="300" height="300"></canvas>
// js
const canvas = document.getElementById('my-house');
const ctx = canvas.getContext('2d'); // CanvasRenderingContext2D对象
有了CanvasRenderingContext2D
上下文对象,就可以绘制自己想要的内容了
先来回顾一下最常用最简单的属性和方法:
线条相关
属性名 | 作用 | 默认值 |
---|---|---|
lineWidth | 线的宽度 | 1 |
lineCap | 线末端的类型 | butt, round , square(以正方形结尾,视觉上比butt长一点) |
lineJoin | 两线相交拐点类型 | miter, round,bevel |
miterLimit | 斜接面限制比例 | 10 |
setLineDash([]) | 设置当前的线段样式 | 数组里的值依次对应虚线的线段和空白的长度,依次重复 |
lineDashOffset(offset) | 从哪里开始绘制线 |
绘制矩形
属性名 | 作用 | 默认值 |
---|---|---|
clearRect | 擦除指定矩形区域的内容 | |
fillRect(x, y, width, height) | 绘制填充矩形 | |
strokeRect(x, y, width, height) | 使用当前的绘画样式,描绘一个矩形 |
路径
属性名 | 作用 | 默认值 |
---|---|---|
beginPath() | 清空路径列表,开始一个新的路径 | |
closePath() | 使笔点返回到当前自路径的起始点 | |
moveTo(x, y) | 将一个新的子路径的起始点移动到指定坐标 | |
lineTo(x, y) | 链接到指定坐标 | |
arc(x, y, r, startAngle, endAngle, 是否逆时针) | 绘制一段圆弧 | |
arcTo(x1, y1, x2, y2, r) | 绘制两个点之间半径为r的圆弧 | |
rect(x, y, width, height) | 绘制一个矩形,可以通过fill或者stroke来填充或描边 | |
bezierCurveTo() | 贝塞尔曲线 |
绘制路径
属性名 | 作用 | 默认值 |
---|---|---|
fill() | 填充路径 | |
stroke() | 描边路径 | |
clip() | 将当前创建的路径设置为当前剪切路径的方法 |
填充和描边
属性名 | 作用 | 默认值 |
---|---|---|
fillStyle | ||
strokeStyle |
渐变
返回的CanvasGradient对象的addColorStop(offset, color)添加渐变颜色
属性名 | 作用 | 默认值 |
---|---|---|
createLinearGradient(x0, y0, x1, y1) | 创建一个沿参数坐标指定的直线的渐变。该方法返回一个线性 对象 | 返回值可以作为描边或者填充的值使用 |
createRadialGradient(x0, y0, r0, x1, y1, r1) | 确定两个圆的坐标,放射性渐变 |
图案
返回CanvasPattern对象,可以把此模式赋值给当前的fillStyle等,在 canvas 上绘制出效果
属性名 | 作用 | 默认值 |
---|---|---|
createPattern(image, repetition) | 用指定的图片创建图案 |
image可以是图片,视频,canvas的Element,或者canvas上下文,ImageData,Blob, ImageBitmap; repetition是重复方式,跟css里的背景图片重复参数一样
|
绘制文本
文本样式
阴影
变换
合成
属性名 | 作用 | 默认值 |
---|---|---|
globalAlpha | 合成到canvas之前,设置图形和图像的透明度 | |
globalCompositeOperation | 设置如何在已经存在的位图上绘制图形和图像 | 详细用法 |
绘制图像
像素控制
canvas状态
以上加粗的api是我经常看到或者使用的,其他更多的可以看MDN的介绍
https://developer.mozilla.org/zh-CN/docs/Web/API/CanvasRenderingContext2D
转自:https://blog.csdn.net/haoyanyu_/article/details/108509098
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?