HTTP/2 301
content-length: 162
content-type: text/html
date: Tue, 14 Oct 2025 23:25:08 GMT
location: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/transform
server: nginx
strict-transport-security: max-age=60; includeSubDomains
via: 1.1 google
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
HTTP/2 200
content-type: text/html
x-guploader-uploadid: AAwnv3JWpnIaWRDmCT2_b666uwfI55R1cQr6gFwFdjxUJcZbPozVbw24A24DzFM6F4Iem_PA
cache-control: public, max-age=3600
expires: Wed, 15 Oct 2025 00:25:09 GMT
last-modified: Tue, 14 Oct 2025 01:04:54 GMT
etag: W/"644ee48dfd51a72333d22e0cc28459f1"
x-goog-generation: 1760403894619348
x-goog-metageneration: 1
x-goog-stored-content-encoding: identity
x-goog-stored-content-length: 148840
x-goog-meta-goog-reserved-file-mtime: 1760402399
x-goog-hash: crc32c=p3bdjg==, md5=ZE7kjf1RpyMz0i4MwoRZ8Q==
x-goog-storage-class: STANDARD
accept-ranges: none
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
alt-svc: clear
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
strict-transport-security: max-age=63072000
content-security-policy: default-src 'self'; script-src 'report-sample' 'self' 'wasm-unsafe-eval' https://www.google-analytics.com/analytics.js https://www.googletagmanager.com/gtag/js assets.codepen.io production-assets.codepen.io https://js.stripe.com 'sha256-XNBp89FG76amD8BqrJzyflxOF9PaWPqPqvJfKZPCv7M=' 'sha256-YCNoU9DNiinACbd8n6UPyB/8vj0kXvhkOni9/06SuYw=' 'sha256-PZjP7OR6mBEtnvXIZfCZ5PuOlxoDF1LDZL8aj8c42rw='; script-src-elem 'report-sample' 'self' 'wasm-unsafe-eval' https://www.google-analytics.com/analytics.js https://www.googletagmanager.com/gtag/js assets.codepen.io production-assets.codepen.io https://js.stripe.com 'sha256-XNBp89FG76amD8BqrJzyflxOF9PaWPqPqvJfKZPCv7M=' 'sha256-YCNoU9DNiinACbd8n6UPyB/8vj0kXvhkOni9/06SuYw=' 'sha256-PZjP7OR6mBEtnvXIZfCZ5PuOlxoDF1LDZL8aj8c42rw='; style-src 'report-sample' 'self' 'unsafe-inline'; object-src 'none'; base-uri 'self'; connect-src 'self' developer.allizom.org bcd.developer.allizom.org bcd.developer.mozilla.org updates.developer.allizom.org updates.developer.mozilla.org https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com https://incoming.telemetry.mozilla.org https://observatory-api.mdn.allizom.net https://observatory-api.mdn.mozilla.net https://api.github.com/search/issues stats.g.doubleclick.net https://api.stripe.com; font-src 'self'; frame-src 'self' interactive-examples.mdn.mozilla.net interactive-examples.mdn.allizom.net mdn.github.io live-samples.mdn.mozilla.net live-samples.mdn.allizom.net *.mdnplay.dev *.mdnyalp.dev *.play.test.mdn.allizom.net https://v2.scrimba.com https://scrimba.com jsfiddle.net www.youtube-nocookie.com codepen.io survey.alchemer.com https://js.stripe.com; img-src 'self' data: *.githubusercontent.com *.googleusercontent.com *.gravatar.com mozillausercontent.com firefoxusercontent.com profile.stage.mozaws.net profile.accounts.firefox.com developer.mozilla.org mdn.dev interactive-examples.mdn.mozilla.net interactive-examples.mdn.allizom.net wikipedia.org upload.wikimedia.org https://mdn.github.io/shared-assets/ https://mdn.dev/ https://*.google-analytics.com https://*.googletagmanager.com www.gstatic.com; manifest-src 'self'; media-src 'self' archive.org videos.cdn.mozilla.net https://mdn.github.io/shared-assets/; child-src 'self'; worker-src 'self';
x-frame-options: DENY
origin-trial: AxVILwizhbMjxFeHOn1P3R8niO1RJY/smaK4B4d1rLzc1gTaxtXMSaTi+FoigYgCw40uFRDwFcEAeqDR+vVLOW4AAABfeyJvcmlnaW4iOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZyIsImZlYXR1cmUiOiJQcml2YXRlQXR0cmlidXRpb25WMiIsImV4cGlyeSI6MTc0MjA3OTYwMH0=
x-cloud-trace-context: b5b4dbf69ab8c5956ac9fecbc7fec9ea
date: Tue, 14 Oct 2025 23:25:10 GMT
server: Google Frontend
via: 1.1 google
vary: Accept-Encoding
content-encoding: gzip
x-cache: miss
CanvasRenderingContext2D: transform() method - Web APIs | MDN
transform(a, b, c, d, e, f)
The transformation matrix is described by: [ a c e b d f 0 0 1 ] \left[ \begin{array}{ccc} a & c & e \ b & d & f \ 0 & 0 & 1 \end{array} \right] .
a
(m11
)
The cell in the first row and first column of the matrix.
b
(m12
)
The cell in the second row and first column of the matrix.
c
(m21
)
The cell in the first row and second column of the matrix.
d
(m22
)
The cell in the second row and second column of the matrix.
e
(m41
)
The cell in the first row and third column of the matrix.
f
(m42
)
The cell in the second row and third column of the matrix.
If a point originally had coordinates ( x , y ) (x, y) , then after the transformation it will have coordinates ( a x + c y + e , b x + d y + f ) (ax + cy + e, bx + dy + f) . This means:
e
and f
control the horizontal and vertical translation of the context.
When b
and c
are 0
, a
and d
control the horizontal and vertical scaling of the context.
When a
and d
are 1
, b
and c
control the horizontal and vertical skewing of the context.
This example skews a rectangle both vertically (.2
) and horizontally
(.8
). Scaling and translation remain unchanged.
HTML
<canvas id="canvas"></canvas>
JavaScript
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
ctx.transform(1, 0.2, 0.8, 1, 0, 0);
ctx.fillRect(0, 0, 100, 100);
Result