U E D R , A S I H C RSS

html5/canvas


1. ์บ”๋ฒ„์Šค?

  • ๊ทธ๋ž˜ํ”ฝ์„ ์ž์œ ๋กญ๊ฒŒ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋Š” ์˜์—ญ.
  • ๊ณ ์ •๋œ ๋„“์ด์™€ ๋†’์ด.
  • IE๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์ฃผ์š” ๋ธŒ๋ผ์šฐ์ €(?)์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ. IE์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฉด Explorer Canvas, uuCanfas.js ๋“ฑ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œํ•œ์  ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

<canvas></canvas>
  • canvas์œ„์— ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋ ค๋ฉด Javascript๋กœ ๊ทธ๋ฆฌ๊ธฐ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค.

    • var canvas = document.getElementById(๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์€ canvas์˜ id);
      var context = canvax.getContext("2d");
      
    • ๊ทธ๋ฆฌ๊ธฐ ์ปจํ…์ŠคํŠธ๋Š” ๊ทธ๋ž˜ํ”ฝ์„ ๊ทธ๋ฆฌ๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

2.1. ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ

  • ์œค๊ณฝ์ด ์žˆ๋Š” ์‚ฌ๊ฐํ˜•์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
  • ์ƒ‰์œผ๋กœ ์ฑ„์šด ์‚ฌ๊ฐํ˜•์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ๊ฐํ˜•์„ ์ง€์šธ ์ˆ˜ ์žˆ๋‹ค.

2.2. ์ด๋ฏธ์ง€ ์‚ฝ์ž…

  • img ์š”์†Œ, video ์š”์†Œ, canvas ์š”์†Œ์˜ DOM ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
    • img ์š”์†Œ์˜ DOM ๊ฐ์ฒด๋Š” Image ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค.
    • video ์š”์†Œ์˜ DOM ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ drawImage()๋ฅผ ํ˜ธ์ถœํ•œ ์‹œ์ ์—์„œ ์žฌ์ƒ๋˜๋Š” ํ”„๋ ˆ์ž„์„ ๊ทธ๋ ค์ค€๋‹ค.
  • ์ด๋ฏธ์ง€๋ฅผ ์›๋ž˜ ํฌ๊ธฐ๋กœ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋ฏธ์ง€์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์›๋ž˜ ์ด๋ฏธ์ง€์—์„œ ์ผ๋ถ€๋ถ„์„ ์ž˜๋ผ๋‚ด์–ด ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • (๊ทธ๋ฆผ ์‚ฝ์ž…)

2.3. ๋ณต์žกํ•œ ์„ ์ด๋‚˜ ๋„ํ˜• ๊ทธ๋ฆฌ๊ธฐ

  • ํŒจ์Šค
    • ์บ”๋ฒ„์Šค์˜ API๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ทธ๋ ค์ง„ ์„ ๋“ค์˜ ์ง‘ํ•ฉ.
    • ์„œ๋ธŒ ํŒจ์Šค
      • ํŒจ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ•˜๋‚˜ํ•˜๋‚˜์˜ ์„ .
      • (๊ทธ๋ฆผ ์‚ฝ์ž…)
    • ๊ทธ๋ฆฌ๊ธฐ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ œ๊ณตํ•˜๋Š” API๋ฅผ ์ด์šฉํ•˜์—ฌ ์ง์„ , ๋ฒ ์ง€์— ๊ณก์„ , ์›ํ˜ธ ๋“ฑ ๋‹ค์–‘ํ•œ ํŒจ์Šค๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
  • ํŒจ์Šค๋ฅผ ๊ทธ๋ ค ๊ทธ๋ž˜ํ”ฝ์„ ํ‘œ์‹œํ•˜๋Š” ์ˆœ์„œ
    1. beginPath()๋กœ ๊ทธ๋ฆฌ๊ธฐ ์‹œ์ž‘.
      • ๊ทธ ์ด์ „์— ๊ทธ๋ ธ๋˜ ํŒจ์Šค๋Š” ๋ชจ๋‘ ๋ฆฌ์…‹๋œ๋‹ค.
    2. ์บ”๋ฒ„์Šค์˜ API๋ฅผ ์ด์šฉํ•˜์—ฌ ํŒจ์Šค ๊ทธ๋ฆฌ๊ธฐ.
      • ์—ฌ๊ธฐ์„œ ๊ทธ๋ฆฐ ํŒจ์Šค๋Š” ์•„์ง ๊ทธ๋ž˜ํ”ฝ์œผ๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์Œ.
    3. ๊ทธ๋ž˜ํ”ฝ์„ ํ™”๋ฉด์— ํ‘œ์‹œ.
      • stroke()
        • ํŒจ์Šค๋ฅผ ์„ ์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
        • ์„ ์˜ ์Šคํƒ€์ผ์€ strokeStyle ์†์„ฑ์œผ๋กœ ์ง€์ •ํ•œ๋‹ค.
      • fill()
        • ํŒจ์Šค ๋‚ด๋ถ€๋ฅผ ์ฑ„์šด๋‹ค.
        • ํ˜ธ์ถœ์‹œ ํŒจ์Šค๊ฐ€ ๋‹ซํžˆ์ง€ ์•Š์•˜๋”๋ผ๋„ ์ž๋™์œผ๋กœ ๋‹ซํžŒ ์ƒํƒœ๋กœ ๋งŒ๋“ ๋‹ค.
        • ๋‚ด๋ถ€ ์Šคํƒ€์ผ์€ fillStyle ์†์„ฑ์œผ๋กœ ์ง€์ •ํ•œ๋‹ค.
      • clip()
        • ํŒจ์Šค์˜ ๋‚ด๋ถ€๋ฅผ ํด๋ฆฌํ•‘ ์˜์—ญ์œผ๋กœ ์ง€์ •ํ•œ๋‹ค.
        • ํด๋ฆฌํ•‘ ์˜์—ญ์ด ์žˆ๋Š” ์ƒํƒœ์—์„œ ์บ”๋ฒ„์Šค์— ๊ทธ๋ ค์ง€๋Š” ๊ทธ๋ž˜ํ”ฝ์€ ํด๋ฆฌํ•‘ ์˜์—ญ ์•ˆ์ชฝ์—๋งŒ ํ‘œ์‹œ๋œ๋‹ค.
        • beginPath()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํด๋ฆฌํ•‘ ์˜์—ญ์„ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
        • (๊ทธ๋ฆผ ์‚ฝ์ž…)

2.4. ์Šคํƒ€์ผ ์ง€์ •

  • strokeStyle
    • stroke(), strokeRect() ๋“ฑ์„ ์ด์šฉํ•˜์—ฌ ๊ทธ๋ฆฐ ์„ ์˜ ์ƒ‰์ด๋‚˜ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•œ๋‹ค.
  • fillStyle
    • fill(), fillRect() ๋“ฑ์„ ์ด์šฉํ•˜์—ฌ ๊ทธ๋ฆฐ ์„ ์˜ ์ƒ‰์ด๋‚˜ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•œ๋‹ค.
  • ์†์„ฑ์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’
    • CSS Color
      • CSS3์˜ ์ƒ‰ ์ง€์ • ๋ฐฉ๋ฒ•์„ ์ „๋ถ€ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ์•„๋ฌด ๊ฒƒ๋„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด #000000(๊ฒ€์€์ƒ‰)์ด ๊ธฐ๋ณธ ๊ฐ’์ด ๋œ๋‹ค.
    • CanvasGradient
      • ์„ ํ˜• ๊ทธ๋ผ๋ฐ์ด์…˜, ์›ํ˜• ๊ทธ๋ผ๋ฐ์ด์…˜์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • CanvasPattern
      • img ์š”์†Œ๋‚˜ video ์š”์†Œ ํ˜น์€ ๋‹ค๋ฅธ ์บ”๋ฒ„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ„ด์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • globalAlpha
    • globalAlpha ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ ํˆฌ๋ช…๋„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์†์„ฑ ๊ฐ’์€ 0.0(์™„์ „ ํˆฌ๋ช…)๋ถ€ํ„ฐ 1.0(๋ถˆํˆฌ๋ช…)๊นŒ์ง€์˜ ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

2.4.1. ์„  ์Šคํƒ€์ผ ์ง€์ •

  • ์„  ์Šคํƒ€์ผ
    • ์„ ์˜ ๊ตต๊ธฐ
    • ์„ ์˜ ๋์ 
      • (๊ทธ๋ฆผ ์‚ฝ์ž…)
    • ์„ ๋“ค์ด ๊ต์ฐจํ–ˆ์„๋•Œ ์ƒ๊ธฐ๋Š” ๊ฐ
      • (๊ทธ๋ฆผ ์‚ฝ์ž…)

2.5. ๊ทธ๋ฆผ์ž ํšจ๊ณผ

  • ๊ทธ๋ฆฌ๊ธฐ ์ปจํ…์ŠคํŠธ๊ฐ€ ๊ฐ€์ง„ ์†์„ฑ์„ ์ง€์ •ํ•˜์—ฌ ์„ ์ด๋‚˜ ๋„ํ˜•์— ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ทธ๋ฆผ์ž ํšจ๊ณผ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

2.6. ์˜์—ญ์ด ๊ฒน์น  ๋•Œ์˜ ๋™์ž‘

  • globalCompositeOperation
    • ์ƒˆ๋กœ์šด ๋„ํ˜•์ด ๊ธฐ์กด ์ด๋ฏธ์ง€์™€ ๊ฒน์น ๋•Œ์˜ ํ–‰๋™์„ ์ง€์ •ํ•˜๋Š” ์†์„ฑ์ด๋‹ค.
    • ๊ธฐ๋ณธ ๊ฐ’์€ source-over ์ด๋‹ค.
    • (๊ทธ๋ฆผ ์‚ฝ์ž…)

2.7. ํ…์ŠคํŠธ ์‚ฝ์ž…

  • ๊ธ€๊ผด, ํฌ๊ธฐ, ๊ฐ€๋กœ ๋ฐฉํ–ฅ ์ •๋ ฌ ์œ„์น˜, ์„ธ๋กœ ๋ฐฉํ–ฅ ์ •๋ ฌ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜์—ฌ ํ…์ŠคํŠธ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • (๋งํฌ)

2.8. ๊ทธ๋ž˜ํ”ฝ ๋ณ€ํ˜•

  • ๊ทธ๋ฆฌ๊ธฐ ์ปจํ…์ŠคํŠธ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ขŒํ‘œ๋ฅผ
    • ํ™•๋Œ€, ์ถ•์†Œ
    • ํšŒ์ „
    • ์ด๋™
      ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ขŒํ‘œ ๋ณ€ํ™˜ ๋งคํŠธ๋ฆญ์Šค

2.9. ๊ทธ๋ฆฌ๊ธฐ ์ปจํ…์ŠคํŠธ ์ƒํƒœ ์ €์žฅ๊ณผ ๋ณต์›

  • save()
    • ๊ทธ๋ฆฌ๊ธฐ ์ปจํ…์ŠคํŠธ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•œ๋‹ค.
    • ํ˜„์žฌ ์บ”๋ฒ„์Šค์— ๊ทธ๋ ค์ง„ ๊ทธ๋ž˜ํ”ฝ์ด๋‚˜ ํŒจ์Šค๋Š” ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ์ €์žฅํ•˜๋Š” ์ƒํƒœ ๋ฐ ์†์„ฑ
      • ์ขŒํ‘œ ๋ณ€ํ™˜ ๋งคํŠธ๋ฆญ์Šค
      • ํด๋ฆฌํ•‘ ์˜์—ญ
      • strokeStyle
      • fillStyle
      • globalAlpha
      • lineWidth
      • lineCap
      • lineJoin
      • miterLimit
      • shadowOffsetX
      • shadowOffsetY
      • shadowBlur
      • shadowColor
      • globalCompositeOperation
      • font
      • textAlign
      • textBaseline
    • restore()
      • ๊ทธ๋ฆฌ๊ธฐ ์ปจํ…์ŠคํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ณต์›ํ•œ๋‹ค.
      • save()๋กœ ์ €์žฅํ•œ ์ƒํƒœ๋Š” ์Šคํƒ์— ์Œ“์ด๊ณ  restore()๋ฅผ ํ˜ธ์ถœํ• ๋•Œ๋งˆ๋‹ค ์Šคํƒ์˜ ํƒ‘์—์„œ๋ถ€ํ„ฐ ์ƒํƒœ๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

2.10. ํ”ฝ์…€๋กœ ๊ทธ๋ฆฌ๊ธฐ

  • ImageDataํ˜• ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์บ”๋ฒ„์Šค ์œ„์˜ ๋น„ํŠธ๋งต ์ด๋ฏธ์ง€๋ฅผ ํ”ฝ์…€ ๋‹จ์œ„๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ImageData์˜ ์†์„ฑ
    • width
    • height
    • data
      • ํ”ฝ์…€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž(0~255)๋กœ ์ด๋ฃจ์–ด์ง„ 1์ฐจ์› ๋ฐฐ์—ด.
      • ๋ฐฐ์—ด์€ 4๊ฐœ์˜ ๊ฐ’์ด ํ•œ๋ฌถ์Œ์œผ๋กœ 1ํ”ฝ์…€์ด ๊ฐ€์ง„ ์ •๋ณด(R, G, B, Alpha)๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

2.11. ์ด๋ฏธ์ง€๋ฅผ URL๋กœ ์–ป๊ธฐ

  • ์บ”๋ฒ„์Šค๊ฐ€ ๊ฐ€์ง„ toDataURL()์„ ํ˜ธ์ถœํ•˜์—ฌ ์บ”๋ฒ„์Šค ๋‚ด์šฉ์„ URL๋กœ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • toDataURL(type)
    • ๊ทธ๋ฆฌ๊ธฐ ์ปจํ…์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๊ณ  ์บ”๋ฒ„์Šค๊ฐ€ ๊ฐ€์ง„ ๋ฉ”์„œ๋“œ์ด๋‹ค.
    • type
      • ์ด๋ฏธ์ง€์˜ ์ธ์ฝ”๋”ฉ ๋ฐฉ๋ฒ•์„ MIME ํƒ€์ž…์œผ๋กœ ์ง€์ •ํ•œ๋‹ค.
      • ๊ธฐ๋ณธ๊ฐ’์€ 'image/png'์ด๋‹ค.
      • 'image/jpeg'์ง€์ • ์‹œ ๋‘๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ˆซ์ž(0.0~1.0)๋ฅผ ๋„ฃ์–ด ์ด๋ฏธ์ง€์˜ ํ’ˆ์งˆ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

2.12. ์• ๋‹ˆ๋ฉ”์ด์…˜

  • ์ผ์ • ๊ฐ„๊ฒฉ์œผ๋กœ ์บ”๋ฒ„์Šค ์ „์ฒด๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ์˜ˆ์ œ


4. ์ฐธ๊ณ  ์ž๋ฃŒ

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:41
Processing time 0.0110 sec