ìºë²ì¤(Canvas) 기본 ì¬ì©ë²
<canvas> HTML ì리먼í¸ë¥¼ ì´í´ë³´ë ê²ì¼ë¡ ì´ íí 리ì¼ì ììí´ ë³´ê² ìµëë¤. ì´ íì´ì§ì ëìì ìºë²ì¤ 2D 컨í
ì¤í¸ë¥¼ ì¤ì íë ë°©ë²ì ìê²ëê³ , ì¬ë¬ë¶ì ë¸ë¼ì°ì ìì 첫 ë²ì§¸ ìì 를 ê·¸ë¦¬ê² ë ê²ì
ëë¤.
<canvas> ìì
<canvas id="tutorial" width="150" height="150"></canvas>
<canvas>ë ì²ììë src ë° alt ìì±ì´ ìë¤ë ì ë§ ì ì¸íë©´ <img> ììì²ë¼ ë³´ì
ëë¤. ì¤ì ë¡ <canvas> ìììë widthì heightì ë ìì±ë§ ììµëë¤. ì´ê²ë¤ì 모ë ì íì¬íì´ë©° DOM íë¡í¼í°ë¥¼ ì¬ì©íì¬ ì¤ì í ìë ììµëë¤. width ë° height ìì±ì ì§ì íì§ ìì¼ë©´ ìºë²ì¤ì ì²ì ëë¹ë 300 í½ì
ì´ê³ ëì´ë 150 í½ì
ì
ëë¤. ììë CSSì ìí´ ììë¡ í¬ê¸°ë¥¼ ì í ì ìì§ë§ ë ëë§íë ëì ì´ë¯¸ì§ë ë ì´ìì í¬ê¸°ì ë§ê² í¬ê¸°ê° ì¡°ì ë©ëë¤. CSS í¬ê¸° ì§ì ì´ ì´ê¸° ìºë²ì¤ì ë¹ì¨ì ê³ ë ¤íì§ ìì¼ë©´ ì곡ëì´ ëíë©ëë¤ .
ì°¸ê³ :
ë
¸í¸: ë§ì½ ë ëë§ì´ ì곡ë ê²ì²ë¼ ë³´ì´ë ê²½ì° CSS를 ì¬ì©íì§ ìê³ <canvas> ìì±ìì width ë° height ìì±ì ëª
ìì ì¼ë¡ ì§ì íììì¤.
id ìì±(ì´í¸ë¦¬ë·°í¸)ë <canvas> ììì êµíëì§ ìë ê¸ë¡ë²HTML ìì± (global HTML attributes )ì¤ íëë¡, 모ë HTML ììì ì ì© ( class ë±ë±)ë ì ììµëë¤. ëì²´ë¡ íì id ìì±ì ì¬ì©í´ 주ëê²ì´ ì¢ìë°, ì´ë ì¤í¬ë¦½í¸ ë´ìì 구ë¶ì ì½ê² í´ ì¤ ì ì기 ë문ì
ëë¤.
<canvas>ììë ì¼ë°ì ì¸ ì´ë¯¸ì§ (margin, border, backgroundâ¦) ì²ë¼ ì¤íì¼ì ì ì©ìí¬ ì ììµëë¤. íì§ë§ ì´ ë°©ë²ì ì¤ì ìºë²ì¤ ìì 그리ë ê²ìë ìí¥ì ë¼ì¹ì§ ììµëë¤. ì´ ë°©ë²ì´ ì´ë»ê² ì¬ì©ëëì§ë í´ë¹ ì±í°ìì íì¸ í ì ììµëë¤. ìºë²ì¤ì ì¤íì¼ë§ì´ ë°ë¡ ì§ì ëìì§ ììë¤ë©´, ìºë²ì¤ ì¤íì¼ì í¬ëª
ì¼ë¡ ì¤ì ëì´ììµëë¤.
ëì²´ ì½í ì¸
<canvas> ììë <video>, <audio> í¹ì <picture>ì²ë¼ <img>ìë ë¬ë¦¬, ì¸í°ë· ìµì¤íë¡ë¬ 9 ì´íì ë²ì ì´ë í
ì¤í¸ê¸°ë° ë¸ë¼ì°ì ë±ê³¼ ê°ì, ìºë²ì¤ë¥¼ ì§ìíì§ ìë ì¤ëë ë¸ë¼ì°ì ë¤ì ìí ëì²´ 컨í
ì¸ ë¥¼ ì ìí기 ì½ìµëë¤. ì¬ë¬ë¶ì ê·¸ë¬í ë¸ë¼ì°ì ë¤ì ìí ëì²´ 컨í
ì¸ ë¥¼ ì ê³µí´ì¼ í©ëë¤.
ëì²´ 컨í
ì¸ ë¥¼ ì ê³µíë ê²ì ë§¤ì° ê°ë¨í©ëë¤. <canvas>íê·¸ ìì ëì²´ 컨í
ì¸ ë¥¼ ì½ì
í©ëë¤. <canvas>íê·¸ 를 ì§ìíì§ ìë ë¸ë¼ì°ì ë 컨í
ì´ë를 무ìíê³ ì»¨í
ì´ë ë´ë¶ì ëì²´ ì½í
ì¸ ë¥¼ ë ëë§ í©ëë¤. <canvas>를 ì§ìíë ë¸ë¼ì°ì ë 컨í
ì´ë ë´ë¶ì ë´ì©ì 무ìíê³ ìºë²ì¤ë¥¼ ì ìì ì¼ë¡ ë ëë§í©ëë¤.
ì를 ë¤ì´, ìºë²ì¤ ë´ì©ì ëí í ì¤í¸ ì¤ëª ì ì ê³µíê±°ë ëì ì¼ë¡ ë ëë§ ë ë´ì©ì ì ì ì´ë¯¸ì§ë¥¼ ì ê³µ í ì ììµëë¤. ì´ê²ì ë¤ìê³¼ ê°ì´ ë³´ì¼ ìììµëë¤:
<canvas id="stockGraph" width="150" height="150">
current stock price: $3.15 +0.15
</canvas>
<canvas id="clock" width="150" height="150">
<img src="images/clock.png" width="150" height="150" alt="" />
</canvas>
ì¬ì©ììê² ìºë²ì¤ë¥¼ ì§ìíë ë¤ë¥¸ ë¸ë¼ì°ì 를 ì¬ì©íëë¡ íë ê²ì ìºë²ì¤ë¥¼ í´ìíì§ ëª»íë ì¬ì©ììê² ì í ëìì´ ëì§ ììµëë¤. ì ì©í ëì²´ í ì¤í¸ë íì DOMì ì ê³µíë ê²ì´ ìºë²ì¤ì ë ì½ê² ì ê·¼í ì ìëë¡ ëìì´ ë ê²ì ëë¤.
</canvas> íê·¸ íì
ëì²´ 컨í
ì¸ ê° ì ê³µëë ë°©ìë문ì, <img> ììì ë¬ë¦¬, <canvas> ììë ë«ë íê·¸(</canvas>)ê° íìí©ëë¤. ë«ë íê·¸ê° ìë¤ë©´, 문ìì ëë¨¸ì§ ë¶ë¶ì´ ëì²´ 컨í
ì¸ ë¡ ê°ì£¼ëê³ ë³´ì´ì§ ìì ê²ì
ëë¤.
ëì²´ 컨í
ì¸ ê° íìíì§ ìë¤ë©´, ë¨ìí <canvas id="foo" ...></canvas>ê° ëª¨ë 미ì§ì ë¸ë¼ì°ì ìì ìì íê² í¸íë©ëë¤.
ë ëë§ ì»¨í ì¤í¸
<canvas> ì리먼í¸ë ê³ ì í¬ê¸°ì ëë¡ì ììì ìì±íê³ íë ì´ìì ë ëë§ ì»¨í
ì¤(rendering contexts)를 ë
¸ì¶íì¬, ì¶ë ¥í 컨í
ì¸ ë¥¼ ìì±íê³ ë¤ë£¨ê² ë©ëë¤. 본 íí 리ì¼ììë, 2D ë ëë§ ì»¨í
ì¤í¸ë¥¼ ì§ì¤ì ì¼ë¡ ë¤ë£¹ëë¤. ë¤ë¥¸ 컨í
ì¤í¸ë ë¤ë¥¸ ë ëë§ íì
ì ì ê³µí©ëë¤. ì를 ë¤ì´, WebGLì OpenGL ES ì 기ë°ì¼ë¡ íë 3D 컨í
ì¤í¸ë¥¼ ì¬ì©í©ëë¤.
ìºë²ì¤ë ì²ìì ë¹ì´ììµëë¤. 무ì¸ê°ë¥¼ íìí기 ìí´ì, ì´ë¤ ì¤í¬ë¦½í¸ê° ëëë§ ì»¨í
ì¤í¸ì ì ê·¼íì¬ ê·¸ë¦¬ëë¡ í íìê° ììµëë¤. <canvas> ììë getContext() ë©ìë를 ì´ì©í´ì, ëëë§ ì»¨í
ì¤í¸ì (ë ëë§ ì»¨í
ì¤í¸ì) 그리기 í¨ìë¤ì ì¬ì©í ì ììµëë¤. getContext() ë©ìëë ë ëë§ ì»¨í
ì¤í¸ íì
ì ì§ì íë íëì íë¼ë©í°ë¥¼ ê°ì§ëë¤. 본 íí 리ì¼ìì ë¤ë£¨ê³ ìë 2D ê·¸ëí½ì ê²½ì°, CanvasRenderingContext2Dì ì»ê¸°ìí´ "2d"ë¡ ì§ì í©ëë¤.
var canvas = document.getElementById("tutorial");
var ctx = canvas.getContext("2d");
첫 ë²ì§¸ ì¤ì ì¤í¬ë¦½í¸ë document.getElementById() ë©ìë를 í¸ì¶íì¬ <canvas> ìì를 íìí DOMì ê²ìí©ëë¤. ììê° ìì¼ë©´ getContext() ë©ìë를 ì¬ì©íì¬ ëë¡ì 컨í
ì¤í¸ì ì¡ì¸ì¤ í ì ììµëë¤.
ì§ìì¬ë¶ ê²ì¬
ëì²´ ì½í
ì¸ ë <canvas>를 ì§ìíì§ ìë ë¸ë¼ì°ì ì íìë©ëë¤. ì¤í¬ë¦½í¸ ìì ê°ë¨íê² getContext() ë©ìëì ì¡´ì¬ ì¬ë¶ë¥¼ í
ì¤í¸í¨ì¼ë¡ì¨ íë¡ê·¸ëë° ë°©ìì¼ë¡ ì§ìíëì§ë¥¼ íì¸í ì ììµëë¤. ìì ì½ë ìì ë ë¤ìê³¼ ê°ì´ ë ì ììµëë¤:
var canvas = document.getElementById("tutorial");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
// drawing code here
} else {
// canvas-unsupported code here
}
í í릿 ë¼ë
ë¤ìì ì´íì ìì ë¤ìì ììì ì¼ë¡ ì¬ì©ë ì ìë ê°ì¥ ìµìíì í í릿ì ëë¤.
ì°¸ê³ : ììë기: HTML ë´ì ì¤í¬ë¦½í¸(script)를 ì¬ì©íëê²ì ì¢ì ì°ìµ ë°©ë²ì´ ìëëë¤. ë¤ìì ììììë ê°ê²°íê² ëíë´ê¸° ìí´ ì¬ì© í ê²ì ëë¤.
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Canvas tutorial</title>
<script type="text/javascript">
function draw() {
var canvas = document.getElementById("tutorial");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
}
}
</script>
<style type="text/css">
canvas {
border: 1px solid black;
}
</style>
</head>
<body onload="draw();">
<canvas id="tutorial" width="150" height="150"></canvas>
</body>
</html>
ì ì¤í¬ë¦½í¸ì draw() í¨ì 문ìê° í¸ì¶ëìëë°, ì´ë 문ìê° load ì´ë²¤í¸ë¥¼ ìì íì¬ íì´ì§ ë¡ë©ì´ ìë£ë ë íë² ì¤íë©ëë¤. ì´ í¨ì í¹ì ì´ì ì ì¬í í¨ìë, íì´ì§ê° ì²ì ë¡ë©ëë í, window.setTimeout(), window.setInterval(), í¹ì ë ë¤ë¥¸ ì´ë²¤í¸ í¸ë¤ë¬ ë±ì ì´ì©íì¬ í¸ì¶ë ì ììµëë¤.
ë¤ìì í íë¦¿ì´ ì¤ì ë¡ ì´ë»ê² ì¤íëëì§ë¥¼ ë³´ì¬ì¤ëë¤. ë³´ì´ë ë°ì ê°ì´, ì´ê¸°ì blank ë¡ ë³´ì¬ì§ëë¤.
기본 ìì
먼ì ë ê°ì ì§ì¬ê°íì 그린 ê°ë¨í ìì 를 ë³´ëë¡íê² ìµëë¤. ê·¸ ì¤ íëë í¬ëª ë(alpha transparency)를ê°ì§ëë¤. ëì¤ì ì´ ìì ê° ì´ë»ê² ìëíëì§ ìì¸í ì´í´ ë³´ê² ìµëë¤.
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<script type="application/javascript">
function draw() {
var canvas = document.getElementById("canvas");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
ctx.fillStyle = "rgb(200,0,0)";
ctx.fillRect(10, 10, 50, 50);
ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
ctx.fillRect(30, 30, 50, 50);
}
}
</script>
</head>
<body onload="draw();">
<canvas id="canvas" width="150" height="150"></canvas>
</body>
</html>
ì´ ìì ë ë¤ìê³¼ ê°ìµëë¤.