CanvasRenderingContext2D

Baseline 广泛可用 *

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

* 此特性的某些部分可能存在不同级别的支持。

CanvasRenderingContext2D 接口是 Canvas API 的一部分,它为 <canvas> 元素的绘图表面提供了 2D 渲染上下文。它用于绘制形状、文本、图像和其他对象。

此页面的参考部分描述了该接口的属性和方法。Canvas 教程中也提供了更多解释、示例和资源。

对于 OffscreenCanvas,存在一个提供渲染上下文的等效接口。离屏渲染上下文继承了 CanvasRenderingContext2D 的大部分相同属性和方法,并在 OffscreenCanvasRenderingContext2D 参考页面中进行了更详细的描述。

基本示例

要获取 CanvasRenderingContext2D 实例,你必须首先有一个 HTML <canvas> 元素可供操作。

html
<canvas id="my-house" width="300" height="300"></canvas>

要获取 canvas 的 2D 渲染上下文,请在 <canvas> 元素上调用 getContext(),并提供 '2d' 作为参数。

js
const canvas = document.getElementById("my-house");
const ctx = canvas.getContext("2d");

有了上下文,你就可以绘制任何你喜欢的东西。这段代码绘制了一个房子。

js
// Set line width
ctx.lineWidth = 10;

// Wall
ctx.strokeRect(75, 140, 150, 110);

// Door
ctx.fillRect(130, 190, 40, 60);

// Roof
ctx.beginPath();
ctx.moveTo(50, 140);
ctx.lineTo(150, 60);
ctx.lineTo(250, 140);
ctx.closePath();
ctx.stroke();

最终的绘图结果如下:

参考

上下文

CanvasRenderingContext2D.getContextAttributes()

返回一个包含浏览器使用的上下文属性的对象。在使用 HTMLCanvasElement.getContext() 创建 2D 上下文时可以请求上下文属性。

CanvasRenderingContext2D.isContextLost()

如果渲染上下文丢失,则返回 true

绘制矩形

有三种方法可以直接在画布上绘制矩形。

CanvasRenderingContext2D.clearRect()

将由起始点 (x, y) 和大小 (width, height) 定义的矩形中的所有像素设置为透明黑色,擦除任何以前绘制的内容。

CanvasRenderingContext2D.fillRect()

(x, y) 位置绘制一个填充矩形,其大小由 widthheight 确定。

CanvasRenderingContext2D.strokeRect()

使用当前描边样式在画布上绘制一个矩形,其起始点为 (x, y),宽度为 w,高度为 h

绘制文本

以下方法绘制文本。另请参阅用于文本属性的 TextMetrics 对象。

CanvasRenderingContext2D.fillText()

在给定的 (x, y) 位置绘制(填充)给定的文本。

CanvasRenderingContext2D.strokeText()

在给定的 (x, y) 位置绘制(描边)给定的文本。

CanvasRenderingContext2D.measureText()

返回一个 TextMetrics 对象。

线条样式

以下方法和属性控制线条的绘制方式。

CanvasRenderingContext2D.lineWidth

线条宽度。默认值 1.0

CanvasRenderingContext2D.lineCap

线条末端的样式。可能的值:butt(默认)、roundsquare

CanvasRenderingContext2D.lineJoin

定义两条线相交处的角点类型。可能的值:roundbevelmiter(默认)。

CanvasRenderingContext2D.miterLimit

斜接限制比。默认值 10

CanvasRenderingContext2D.getLineDash()

返回当前线条虚线图案数组,其中包含偶数个非负数。

CanvasRenderingContext2D.setLineDash()

设置当前线条虚线图案。

CanvasRenderingContext2D.lineDashOffset

指定虚线数组在一条线上开始的位置。

文本样式

以下属性控制文本的布局方式。

CanvasRenderingContext2D.font

字体设置。默认值 "10px sans-serif"

CanvasRenderingContext2D.textAlign

文本对齐设置。可能的值:start(默认)、endleftrightcenter

CanvasRenderingContext2D.textBaseline

基线对齐设置。可能的值:tophangingmiddlealphabetic(默认)、ideographicbottom

CanvasRenderingContext2D.direction

方向性。可能的值:ltrrtlinherit(默认)。

CanvasRenderingContext2D.letterSpacing

字母间距。默认值:0px

CanvasRenderingContext2D.fontKerning

字体字偶距。可能的值:auto(默认)、normalnone

CanvasRenderingContext2D.fontStretch

字体拉伸。可能的值:ultra-condensedextra-condensedcondensedsemi-condensednormal(默认)、semi-expandedexpandedextra-expandedultra-expanded

CanvasRenderingContext2D.fontVariantCaps

字体大写样式。可能的值:normal(默认)、small-capsall-small-capspetite-capsall-petite-capsunicasetitling-caps

CanvasRenderingContext2D.textRendering

文本渲染。可能的值:auto(默认)、optimizeSpeedoptimizeLegibilitygeometricPrecision

CanvasRenderingContext2D.wordSpacing

单词间距。默认值:0px

CanvasRenderingContext2D.lang 实验性

获取或设置 canvas 绘图上下文的语言。

填充和描边样式

填充样式用于形状内部的颜色和样式,描边样式用于形状周围的线条。

CanvasRenderingContext2D.fillStyle

用于形状内部的颜色或样式。默认值为 black

CanvasRenderingContext2D.strokeStyle

用于形状周围线条的颜色或样式。默认值为 black

渐变和图案

CanvasRenderingContext2D.createConicGradient()

围绕由参数表示的坐标点创建一个锥形渐变。

CanvasRenderingContext2D.createLinearGradient()

沿由参数表示的坐标线创建一个线性渐变。

CanvasRenderingContext2D.createRadialGradient()

根据参数表示的两个圆的坐标创建一个径向渐变。

CanvasRenderingContext2D.createPattern()

使用指定的图像创建图案。它按照重复参数指定的方向重复源。此方法返回一个 CanvasPattern

阴影

CanvasRenderingContext2D.shadowBlur

指定模糊效果。默认值:0

CanvasRenderingContext2D.shadowColor

阴影颜色。默认值:完全透明的黑色。

CanvasRenderingContext2D.shadowOffsetX

阴影的水平偏移距离。默认值:0

CanvasRenderingContext2D.shadowOffsetY

阴影的垂直偏移距离。默认值:0

路径

以下方法可用于操作对象的路径。

CanvasRenderingContext2D.beginPath()

通过清空子路径列表来开始新路径。当你想要创建新路径时调用此方法。

CanvasRenderingContext2D.closePath()

使画笔点移回到当前子路径的起点。它尝试从当前点到起点绘制一条直线。如果形状已关闭或只有一个点,此函数不执行任何操作。

CanvasRenderingContext2D.moveTo()

将新子路径的起始点移动到 (x, y) 坐标。

CanvasRenderingContext2D.lineTo()

用一条直线将当前子路径中的最后一个点连接到指定的 (x, y) 坐标。

CanvasRenderingContext2D.bezierCurveTo()

向当前路径添加一条三次贝塞尔曲线。

CanvasRenderingContext2D.quadraticCurveTo()

向当前路径添加一条二次贝塞尔曲线。

CanvasRenderingContext2D.arc()

向当前路径添加一个圆弧。

CanvasRenderingContext2D.arcTo()

根据给定的控制点和半径向当前路径添加一个圆弧,并用一条直线连接到前一个点。

CanvasRenderingContext2D.ellipse()

向当前路径添加一个椭圆弧。

CanvasRenderingContext2D.rect()

在 (x, y) 位置创建一个矩形路径,其大小由 widthheight 确定。

CanvasRenderingContext2D.roundRect()

创建一个具有指定位置、宽度、高度和圆角半径的圆角矩形路径。

绘制路径

CanvasRenderingContext2D.fill()

使用当前填充样式填充当前子路径。

CanvasRenderingContext2D.stroke()

使用当前描边样式描绘当前子路径。

CanvasRenderingContext2D.drawFocusIfNeeded()

如果给定元素获得焦点,此方法会在当前路径周围绘制一个焦点环。

CanvasRenderingContext2D.clip()

从当前子路径创建裁剪路径。调用 clip() 后绘制的所有内容都只显示在裁剪路径内。有关示例,请参阅 Canvas 教程中的裁剪路径

CanvasRenderingContext2D.isPointInPath()

报告指定的点是否包含在当前路径中。

CanvasRenderingContext2D.isPointInStroke()

报告指定的点是否在路径描边所包含的区域内。

转换

CanvasRenderingContext2D 渲染上下文中的对象具有当前的变换矩阵和操作它的方法。变换矩阵在创建当前默认路径、绘制文本、形状和 Path2D 对象时应用。以下列出的方法是出于历史和兼容性原因保留的,因为现在 API 的大部分都使用 DOMMatrix 对象,并且将来也将继续使用。

CanvasRenderingContext2D.getTransform()

检索当前应用于上下文的变换矩阵。

CanvasRenderingContext2D.rotate()

向变换矩阵添加旋转。角度参数表示顺时针旋转角度,以弧度表示。

CanvasRenderingContext2D.scale()

通过 x 水平方向和 y 垂直方向对 canvas 单位添加缩放变换。

CanvasRenderingContext2D.translate()

通过将 canvas 及其原点在网格上水平移动 x 和垂直移动 y 来添加平移变换。

CanvasRenderingContext2D.transform()

将当前变换矩阵与其参数描述的矩阵相乘。

CanvasRenderingContext2D.setTransform()

将当前变换重置为单位矩阵,然后使用相同的参数调用 transform() 方法。

CanvasRenderingContext2D.resetTransform()

通过单位矩阵重置当前变换。

合成

CanvasRenderingContext2D.globalAlpha

在形状和图像合成到画布上之前应用的 Alpha 值。默认值 1.0(不透明)。

CanvasRenderingContext2D.globalCompositeOperation

在应用 globalAlpha 后,这会设置如何将形状和图像绘制到现有位图上。

绘制图像

CanvasRenderingContext2D.drawImage()

绘制指定的图像。此方法有多种格式,提供了很大的使用灵活性。

像素操作

另请参阅 ImageData 对象。

CanvasRenderingContext2D.createImageData()

创建具有指定尺寸的新空白 ImageData 对象。新对象中的所有像素都是透明黑色。

CanvasRenderingContext2D.getImageData()

返回一个 ImageData 对象,表示画布区域的底层像素数据,该区域由从 (sx, sy) 开始、宽度为 sw、高度为 sh 的矩形表示。

CanvasRenderingContext2D.putImageData()

将给定 ImageData 对象中的数据绘制到位图上。如果提供了脏矩形,则只绘制该矩形中的像素。

图像平滑

CanvasRenderingContext2D.imageSmoothingEnabled

图像平滑模式;如果禁用,图像在缩放时将不会进行平滑处理。

CanvasRenderingContext2D.imageSmoothingQuality

允许你设置图像平滑的质量。

Canvas 状态

CanvasRenderingContext2D 渲染上下文包含各种绘图样式状态(线条样式、填充样式、阴影样式、文本样式的属性)。以下方法可帮助你处理该状态。

CanvasRenderingContext2D.save()

使用堆栈保存当前绘图样式状态,以便你可以使用 restore() 恢复对其所做的任何更改。

CanvasRenderingContext2D.restore()

将绘图样式状态恢复到由 save() 保存的“状态堆栈”上的最后一个元素。

CanvasRenderingContext2D.canvas

HTMLCanvasElement 的只读反向引用。如果未与 <canvas> 元素关联,则可能为 null

CanvasRenderingContext2D.getContextAttributes()

返回一个包含浏览器使用的上下文属性的对象。在使用 HTMLCanvasElement.getContext() 创建 2D 上下文时可以请求上下文属性。

CanvasRenderingContext2D.reset()

重置渲染上下文,包括后台缓冲区、绘图状态堆栈、路径和样式。

CanvasRenderingContext2D.isContextLost() 实验性

如果渲染上下文丢失,则返回 true

过滤器

CanvasRenderingContext2D.filter

对 canvas 应用 CSS 或 SVG 滤镜,例如,更改其亮度或模糊度。

规范

规范
HTML
# 2dcontext

浏览器兼容性

另见