CanvasRenderingContext2D.scale() - Web APIs 编辑
The CanvasRenderingContext2D
.scale()
method of the Canvas 2D API adds a scaling transformation to the canvas units horizontally and/or vertically.
By default, one unit on the canvas is exactly one pixel. A scaling transformation modifies this behavior. For instance, a scaling factor of 0.5 results in a unit size of 0.5 pixels; shapes are thus drawn at half the normal size. Similarly, a scaling factor of 2.0 increases the unit size so that one unit becomes two pixels; shapes are thus drawn at twice the normal size.
Syntax
void ctx.scale(x, y);
Parameters
x
- Scaling factor in the horizontal direction. A negative value flips pixels across the vertical axis. A value of
1
results in no horizontal scaling. y
- Scaling factor in the vertical direction. A negative value flips pixels across the horizontal axis. A value of
1
results in no vertical scaling.
Examples
Scaling a shape
This example draws a scaled rectangle. A non-scaled rectangle is then drawn for comparison.
HTML
<canvas id="canvas"></canvas>
JavaScript
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);
Result
The scaled rectangle is red, and the non-scaled rectangle is gray.
Flipping things horizontally or vertically
You can use scale(-1, 1)
to flip the context horizontally and scale(1, -1)
to flip it vertically. In this example, the words "Hello world!" are flipped horizontally.
Note that the call to 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.
HTML
<canvas id="canvas"></canvas>
JavaScript
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);
Result
Specifications
Specification | Status | Comment |
---|---|---|
HTML Living Standard The definition of 'CanvasRenderingContext2D.scale' in that specification. | Living Standard |
Browser compatibility
BCD tables only load in the browser
See also
- The interface defining this method:
CanvasRenderingContext2D
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论