CanvasRenderingContext2D: scale() method
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
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
scale(x, y)
Parameters
Return value
None (undefined
).
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 |
---|
HTML Standard # dom-context-2d-scale-dev |
Browser compatibility
BCD tables only load in the browser
See also
- The interface defining this method:
CanvasRenderingContext2D