๋ฐ˜์‘ํ˜•

๋„ํ˜• ์‚ฌ์ด์ฆˆ ์กฐ์ • ๋ฉ”์„œ๋“œ


  • ctx.scale(x, y) : ๋„ํ˜• ํฌ๊ธฐ ํ™•๋Œ€/์ถ•์†Œ. ์บ”๋ฒ„์Šค์—์„œ 1๋‹จ์œ„๋Š” 1ํ”ฝ์…€. scale(2, 2)๋Š” ํ•˜๋‚˜์˜ ๋‹จ์œ„๋ฅผ 2ํ”ฝ์…€๋กœ ํ™•๋Œ€(์ขŒํ‘œ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ ์ฆ๊ฐ€).
  • ctx.translate(x, y) : ์บ”๋ฒ„์Šค์˜ ์›์  ์ด๋™. ๊ธฐ๋ณธ๊ฐ’์€ ์™ผ์ชฝ ์ขŒ์ƒ๋‹จ (0, 0).
  • ctx.rotate(angle) : ๋„ํ˜•์„ ๋ผ๋””์•ˆ(angle) ๋‹จ์œ„๋งŒํผ ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „. ํ•ญ์ƒ ์บ”๋ฒ„์Šค ์›์ ์ด ํšŒ์ „์˜ ์ค‘์‹ฌ.
  • ctx.transform(scaleX, skewX, skewY, scaleY, translateX, translateY)
    • scale(), rotate(), translate() ์ผ๊ด„ ์ ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ.
    • ์ด์ „ ๋ณ€ํ˜• ๊ฒฐ๊ณผ๊ฐ’์— ์ด์–ด์„œ ์ˆ˜ํ–‰.
    • ์ดˆ๊ธฐ ์ƒํƒœ์—์„œ transform(1.2, 0, 0, 1.2, -30, -30)์„ 3๋ฒˆ ์ˆ˜ํ–‰ํ•˜๊ณ  Matrix ์ •๋ณด๋ฅผ ํ™•์ธํ•ด ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ์ด์ „์— ์ˆ˜ํ–‰ํ•œ Matrix ๊ฒฐ๊ณผ ๊ฐ’์— ์ด์–ด์„œ transform()์ด ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ.
console.log(ctx.getTransform());
// ์ถœ๋ ฅ ๊ฒฐ๊ณผ: 1.72, 0, 0, 1.72, -90, -90

// scaleX ๋ณ€ํ™” ๊ณผ์ •: 1 * 1.2 * 1.2 * 1.2 = 1.72
// scaleY ๋ณ€ํ™” ๊ณผ์ •: 1 * 1.2 * 1.2 * 1.2 = 1.72
// translateX ๋ณ€ํ™” ๊ณผ์ •: 0 - 30 - 30 - 30 = -90
// translateY ๋ณ€ํ™” ๊ณผ์ •: 0 - 30 - 30 - 30 = -90
  • ctx.setTransform(scaleX, skewX, skewY, scaleY, translateX, translateY)
    • ์ด์ „ ์„ค์ •๊ฐ’์„ ๋ฌด์‹œํ•˜๊ณ  transform() ์‹คํ–‰
    • transform(1, 0, 0, 1, 0, 0)์ธ ์ƒํƒœ์—์„œ transform() ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผ
  • ctx.getTransform() : ํ˜„์žฌ Matrix ์ •๋ณด ์กฐํšŒ
console.log(ctx.getTransform());
// DOMMatrix {a: 1, b: 0, c: 0, d: 1, e: 0, f: 0, ...}
  • ctx.resetTransform() : ํ˜„์žฌ Matrix ์ •๋ณด ์ดˆ๊ธฐํ™”
console.log(ctx.getTransform()); // 1.2, 0, 0, 1.2, -64, -87, ...
ctx.resetTransform(); // ํ˜น์€ ctx.setTransform(1, 0, 0, 1, 0, 0)
console.log(ctx.getTransform()); // 1, 0, 0, 1, 0, 0

 

 

scale() ์‹คํ–‰ ํ›„ ์›์  ์กฐ์ •


์บ”๋ฒ„์Šค์—์„œ scale(2, 2)๋ฅผ ์ ์šฉํ•˜๋ฉด ๋ชจ๋“  ๊ทธ๋ž˜ํ”ฝ ์š”์†Œ(๋„ํ˜•)์˜ ํฌ๊ธฐ๊ฐ€ 2๋ฐฐ๋กœ ๋Š˜์–ด๋‚˜๋ฏ€๋กœ, scale() ์ ์šฉ ์ „ ์บ”๋ฒ„์Šค ์ค‘์•™์— ๊ทธ๋ ธ๋˜ ๋„ํ˜•์€ ์•„๋ž˜์ฒ˜๋Ÿผ ๊ฐ€์žฅ์ž๋ฆฌ๋งŒ ๋ณด์ธ๋‹ค.

์ฐธ๊ณ ๋กœ scale() ์ˆ˜ํ–‰ ์‹œ ์‹ค์ œ ์บ”๋ฒ„์Šค์˜ ๋ฌผ๋ฆฌ์  ํฌ๊ธฐ๊ฐ€ ๋Š˜์–ด๋‚˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ(๋…ผ๋ฆฌ์  ํ™•๋Œ€) ์•„๋ž˜๋Š” ์„ค๋ช…์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด ์บ”๋ฒ„์Šค ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์„ค๋ช…ํ–ˆ๋‹ค.

 

๋Š˜์–ด๋‚œ ์บ”๋ฒ„์Šค ํฌ๊ธฐ(width, height)์˜ ์ ˆ๋ฐ˜๋งŒํผ ์›์ ์„ ์ด๋™์‹œํ‚ค๋ฉด ์บ”๋ฒ„์Šค๊ฐ€ ์Šคํฌ๋ฆฐ ๊ฐ€์šด๋ฐ ๋ณด์ด๋„๋ก ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • ์›๋ž˜ ์บ”๋ฒ„์Šค ํฌ๊ธฐ๊ฐ€ width 600, height 400 ์ด๋ผ๊ณ  ๊ฐ€์ •
  • scale(2, 2) ํ›„ ์บ”๋ฒ„์Šค ํฌ๊ธฐ๋Š” width 1200, height 800
  • ํ™•๋Œ€ ์ „/ํ›„ ์บ”๋ฒ„์Šค ํฌ๊ธฐ ์ฐจ์ด๋Š” width 600, height 400
  • ๋Š˜์–ด๋‚œ ํฌ๊ธฐ์˜ ์ ˆ๋ฐ˜๋งŒํผ ์›์ ์„ ์ด๋™์‹œํ‚ค๋ฉด ๋„ํ˜•์ด ์Šคํฌ๋ฆฐ ์ •์ค‘์•™์— ์œ„์น˜ translate(-300, -200)
๋ฐ˜์‘ํ˜•