CanvasRenderingContext2D

Canvas APICanvasRenderingContext2D 接口用来给 <canvas> 元素的绘图表面提供 2D 渲染上下文。它用于绘制形状、文本、图像和其他对象。

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

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

基础示例

要获得 CanvasRenderingContext2D 实例,你必须首先具有可以使用的 HTML <canvas> 元素:

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

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

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

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

js
// 设置线条宽度
ctx.lineWidth = 10;

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

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

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

生成的图形如下所示:

参考

上下文

CanvasRenderingContext2D.isContextLost()

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

绘制矩形

以下是 3 个可以立刻绘制矩形的方法。

CanvasRenderingContext2D.clearRect()

设置指定矩形区域内(以点 (x, y) 为起点,大小为 (width, height))所有像素变成透明的黑色,并擦除之前绘制的所有内容。

CanvasRenderingContext2D.fillRect()

绘制填充矩形,矩形的起点为 (x, y) 位置,尺寸为 widthheight

CanvasRenderingContext2D.strokeRect()

在 canvas 中,使用当前的笔触样式,描绘一个起点在 (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.fillStyle

图形内部的颜色和样式。默认为 #000(黑色)。

CanvasRenderingContext2D.strokeStyle

图形边线的颜色和样式。默认为 #000(黑色)。

渐变和图案

CanvasRenderingContext2D.createConicGradient()

在由参数表示的坐标点周围创建一个圆锥渐变。

CanvasRenderingContext2D.createLinearGradient()

创建一个沿着参数坐标指定的线的线性渐变。

CanvasRenderingContext2D.createRadialGradient()

创建一个沿着参数表示的两个圆形的坐标坐标指定的线的径向渐变。

CanvasRenderingContext2D.createPattern()

使用指定的图片创建图案。通过 repetition 变量指定的方向上重复源图片。此方法返回 CanvasPattern 对象。

阴影

CanvasRenderingContext2D.shadowBlur

描述模糊效果。默认为 0

CanvasRenderingContext2D.shadowColor

阴影的颜色。默认为 fully-transparent black。

CanvasRenderingContext2D.shadowOffsetX

阴影水平方向的偏移量。默认为 0

CanvasRenderingContext2D.shadowOffsetY

阴影垂直方向的偏移量。默认为 0

路径

下面的方法用来操作对象的路径。

CanvasRenderingContext2D.beginPath()

清空子路径列表开始一个新的路径。当你想创建一个新的路径时,调用此方法。

CanvasRenderingContext2D.closePath()

使笔点返回到当前子路径的起始点。它尝试从当前点到起始点绘制一条直线。如果图形已经是封闭的或者只有一个点,那么此方法不会做任何操作。

CanvasRenderingContext2D.moveTo()

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

CanvasRenderingContext2D.lineTo()

使用直线连接子路径的最后的点到 (x, y) 坐标。

CanvasRenderingContext2D.bezierCurveTo()

添加一个 3 次贝赛尔曲线路径。

CanvasRenderingContext2D.quadraticCurveTo()

添加一个 2 次贝赛尔曲线路径。

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 对象的时候,会应用此变换矩阵。下面列出的方法出于历史和兼容性的原因而被保留:DOMMatrix 对象现在此 API 中被大量使用,将来会被替换。

CanvasRenderingContext2D.getTransform()

获取当前应用于上下文的变换矩阵。

CanvasRenderingContext2D.rotate()

在变换矩阵中增加旋转,角度变量表示一个顺时针旋转角度并且用弧度表示。

CanvasRenderingContext2D.scale()

根据 x 水平方向和 y 垂直方向,为 canvas 单位添加缩放变换。

CanvasRenderingContext2D.translate()

通过在网格中移动 canvas 和 canvas 原点 x 水平方向、原点 y 垂直方向,添加平移变换。

CanvasRenderingContext2D.transform()

使用方法参数描述的矩阵多次叠加当前的变换矩阵。

CanvasRenderingContext2D.setTransform()

重新设置当前的变换为单位矩阵,并使用同样的变量调用 transform() 方法。

CanvasRenderingContext2D.resetTransform()

使用单位矩阵重新设置当前的变换。

合成

CanvasRenderingContext2D.globalAlpha

在合成到 canvas 之前,设置图形和图像透明度的值。默认 1.0(不透明)。

CanvasRenderingContext2D.globalCompositeOperation

globalAlpha 一起设置如何在已经存在的位图上绘制图形和图像。

绘制图像

CanvasRenderingContext2D.drawImage()

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

像素控制

参见 ImageData 对象。

CanvasRenderingContext2D.createImageData()

使用指定的尺寸,创建一个新的、空白的 ImageData 对象。所有的像素在新对象中都是透明的。

CanvasRenderingContext2D.getImageData()

返回一个 ImageData 对象,用来描述 canvas 区域隐含的像素数据,这个区域通过矩形表示,起始点为 (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

将 CSS 或 SVG 滤镜应用于画布,例如更改其亮度或模糊度。

规范

Specification
HTML Standard
# 2dcontext

浏览器兼容性

BCD tables only load in the browser

参见