--- title: CanvasRenderingContext2D.scale() slug: Web/API/CanvasRenderingContext2D/scale translation_of: Web/API/CanvasRenderingContext2D/scale ---
CanvasRenderingContext2D
.scale()
是 Canvas 2D API 根据 x 水平方向和 y 垂直方向,为canvas 单位添加缩放变换的方法。
默认的, 在 canvas 中一个单位实际上就是一个像素。例如,如果我们将0.5作为缩放因子,最终的单位会变成0.5像素,并且形状的尺寸会变成原来的一半。相似的方式,我们将2.0作为缩放因子,将会增大单位尺寸变成两个像素。形状的尺寸将会变成原来的两倍。
void ctx.scale(x, y);
x
1
results in no horizontal scaling.1
results in no vertical scaling.scale
方法这是一段使用 scale
方法的简单的代码片段。
<canvas id="canvas"></canvas>
The rectangle has a specified width of 8 and a height of 20. The transformation matrix scales it by 9x horizontally and by 3x vertically. Thus, its final size is a width of 72 and a height of 60.
Notice that its position on the canvas also changes. Since its specified corner is (10, 10), its rendered corner becomes (90, 30).
const canvas = document.getElementById('canvas'); const ctx = canvas.getContext('2d'); // Scaled rectangle ctx.scale(9, 3); ctx.fillStyle = 'red'; ctx.fillRect(10, 10, 8, 20); // Reset current transformation matrix to the identity matrix ctx.setTransform(1, 0, 0, 1, 0, 0); // Non-scaled rectangle ctx.fillStyle = 'gray'; ctx.fillRect(10, 10, 8, 20);
The scaled rectangle is red, and the non-scaled rectangle is gray.
{{ EmbedLiveSample('Scaling_a_shape', 700, 180) }}
你可以使用 ctx.scale(-1, 1)
水平翻转上下文,使用 ctx.scale(1, -1)
垂直翻转上下文。在这个例子中,"Hello world!" 被水平翻转。
Note that the call to {{domxref("CanvasRenderingContext2D.fillText()", "fillText()")}} specifies a negative x coordinate. This is to adjust for the negative scaling factor: -280 * -1
becomes 280
, and text is drawn leftwards from that point.
<canvas id="canvas"></canvas>
const canvas = document.getElementById('canvas'); const ctx = canvas.getContext('2d'); ctx.scale(-1, 1); ctx.font = '48px serif'; ctx.fillText('Hello world!', -280, 90); ctx.setTransform(1, 0, 0, 1, 0, 0);
{{ EmbedLiveSample('Flipping_things_horizontally_or_vertically', 700, 180) }}
Specification | Status | Comment |
---|---|---|
{{SpecName('HTML WHATWG', "scripting.html#dom-context-2d-scale", "CanvasRenderingContext2D.scale")}} | {{Spec2('HTML WHATWG')}} |
{{Compat("api.CanvasRenderingContext2D.scale")}}