이전 포스트에서 index.html, Nagarry.css를 만들었다.

이젠 Javascript파일 Nagarry.js를 추가해서 Canvas를 제어해 보겠다.




canvas는 말 그대로 뭔가를 그릴 수 있는 도화지 같은 바탕일 뿐이기에

크기 이외의 모든 것은 Javascript를 통해 이루어진다.


아래와 같은 index.html과 Nagarry.css파일을 준비하자.

(이전 포스트에서 작성했던 내용이다.)

Index.html

<!DOCTYPE html>

<html lang="ko">

<head>

<meta charset="UTF-8">

<title>Nagarry's HTML5</title>

<link type="text/css" rel="stylesheet" href="./css/Nagarry.css">

<script src="./script/Nagarry.js"></script>

</head>

<body>

<canvas id="CANVAS_1" width="800" height="480">

Sorry, Your browser doesn't support HTML5 Canvas.

</canvas>

</body>

</html>

Nagarry.css

@CHARSET "UTF-8";

body

{

background:#555555;

margin:20px;

}


#CANVAS_1

{

background:#ffffff;

border:1px solid #000000;

}



이제 아무 의심없이 아래와 같은 Javascript파일을 만들어보자.

Nagarry.js

var can1 = document.getElementById("CANVAS_1");

var context1 = can1.getContext("2d");

context1.fillStyle = "#ff0000";

context1.fillRect(50, 50, 360, 240);


이 javascript가 문제없이 동작한다면....

canvas내의 50, 50좌표에 360*240 크기의 붉은 사각형이 나타날 것이다.

(이 구문의 설명은 밑에서 하겠다)


브라우저를 통해 실행해보라.

지난 포스트에서 봤던거랑 달라진게 있는가???


없다. 붉은 사각형이 나타나지 않는다.

왜그럴까?

index.html파일을 다시 보겠다.

Index.html

<!DOCTYPE html>

<html lang="ko">

<head>

<meta charset="UTF-8">

<title>Nagarry's HTML5</title>

<link type="text/css" rel="stylesheet" href="./css/Nagarry.css">

<script src="./script/Nagarry.js"></script>

</head>

<body>

<canvas id="CANVAS_1" width="800" height="480">

Sorry, Your browser doesn't support HTML5 Canvas.

</canvas>

</body>

</html>


javascript에서는 분명 "CANVAS_1"이라는 것을 당겨썼지만,

"CANVAS_1"보다 먼저 javascript가 호출되었기 때문이다.


달리말해 <canvas>태그가 정의된 후에 javascript가 정의되거나 호출되어야 한다는 것이다.

그래서 수정하자면 아래와 같다.

Index.html

<!DOCTYPE html>

<html lang="ko">

<head>

<meta charset="UTF-8">

<title>Nagarry's HTML5</title>

<link type="text/css" rel="stylesheet" href="./css/Nagarry.css">

</head>

<body>

<canvas id="CANVAS_1" width="800" height="480">

Sorry, Your browser doesn't support HTML5 Canvas.

</canvas>

<script src="./script/Nagarry.js"></script>

</body>

</html>


수정후 브라우저를 통해 보면 이젠 사각형이 나올 것이다.


이제야 의도한 대로 동작한다.


그럼 javascript 문장을 살펴보겠다.

첫줄부터 마지막줄까지 설명한다.(이런 친절한 설명은 처음이자 마지막이 아닐까 싶다ㅎㅎㅎㅎ)

Nagarry.js

var can1 = document.getElementById("CANVAS_1");

var context1 = can1.getContext("2d");

context1.fillStyle = "#ff0000";

context1.fillRect(50, 50, 360, 240);


var can1 = document.getElementById("CANVAS_1");

can1이란 변수에 id가 "CANVAS_1"이라고 정의된 녀석을 대입한다.

이것으로 can1이 canvas가 되는것이다.


var context1 = can1.getContext("2d");

context1이란 변수에 canvas의 2d context를 대입한다.

context란 웹브라우저에서 제공하는 canvas용 그리기 영역이다.

하나의 canvas에는 하나의context가 있어, context와 canvas는 1:1매칭이 되고,

context를 통해 canvas에 이것 저것을 채워넣을 수 있다.

canvas의 다른 메서드는 젤 밑부분 "1)부가설명"을 보라.


context1.fillStyle = "#ff0000";

context에서 채우기 기능을 할 경우 채움색을 지정한다.

"#ff0000"이니 뭐든 채우기를 할 경우 붉은 색이 될 것이다.


context1.fillRect(50, 50, 360, 240);

사각형 채우기 기능을 한다.

x좌료 50, y좌표 50에서 시작하는 가로 360, 세로 240 사각형을 그린다.



자, 그럼 여기서 드는 의문.

<canvas>를 제어하는 javascript는 언제나 <canvas>태그 이후에 정의 되어야 하는가???

아니다. 방법이 있다.

<canvas>보다 앞에서 정의되더라도 얼마든지 제어할 수 있다.

다음 포스트에서 살펴보도록 하겠다.



---------------------------------------------------------------------------------------

1)부가설명

canvas의 메서드는 아래와 같다.

메서드 

내용 

  getContext() 

  canvas의 context를 반환한다. 

  toDataURL(type, quality)

  데이터 URL을 반환한다. <img>태그의 src속성에 쓰일 수 있는데,

  첫 인자인 type은 image/jpeg, image/png같은 이미지 타입을 지정한다.

  두번째 인자인 quality는 0.0~1.0으로 이미지 품질수준을 지정한다.

  toBlob(callback, type, args...)

  캔버스의 이미지 파일을 나타내는 Blob을 생성한다.

  첫 인자인 callback은 호출하는 함수,

  두번째 인자인 type은  image/png같은 이미지 타입,

  세번째 인자는 0.0~1.0으로 이미지 품질수준을 지정하고...

  이미지 특성을 제어하기 위해 다른 인수를 추가할 수 있다.



2)부가설명

HTML태그인 canvas의 속성은 딱 2가지 밖에 없다.

속성 

 내역

타입 

기본값 

 width

canvas의 너비 

음이 아닌 정수 

300 

 height

canvas의 높이 

음이 아닌 정수 

150 


아래와 같이 기술했다면, html을 통해 할 수 있는 모든것을 다한 셈이다.

<canvas id="CANVAS_1" width="800" height="480">Canvas지원하는 최신 브라우저 쓰세요</canvas>


Google AdSense

HTML, CSS 2개의 파일로 구성되는 HTML5 기본 페이지를 만들어 보겠다.

(Index.html, css/Nagarry.css)

Index.html

Nagarry.css





Index.html

<!DOCTYPE html>

<html lang="ko">

<head>

<meta charset="UTF-8">

<title>Nagarry's HTML5</title>

<link type="text/css" rel="stylesheet" href="./css/Nagarry.css">

<script src="./script/Nagarry.js"></script>

</head>

<body>

<canvas id="CANVAS_1" width="800" height="480">

Sorry, Your browser doesn't support HTML5 Canvas.

</canvas>

</body>

</html>

HTML5는 이전 HTML과 차이가 있는데, 윗부분에 파랗게 마크한 부분이다.


첫째. <!DOCTYPE html>

HTML5 표준을 따르는 문서라는 뜻이다. HTML5문서를 작성할때 항상 첫줄에 두어야한다.


둘째. <html lang="ko">

<html>해더에 사용언어 명시


셋째. <meta charset="UTF-8">

문자가 깨지는 것을 방지하기 위해 "euc-kr", "utf-8"등 캐릭터셋을 명시해야한다.


넷째. <script src="./script/Nagarry.js"></script>

더이상 <script> 태그내에 type="text/javascript"라는 구문은 필요없다.

Javascript가 표준이기 때문에 생략이 되었다.


다섯째. <canvas id="CANVAS_1" width="800" height="480"></canvas>

HTML5에는 새로운 태그들이 추가되었고, 그 중 대표적인 태그인 <Canvas>이다.

<canvas ...> </canvas> 사이에 "Sorry, ..."라는 부분이 있는데, 이것은 <canvas>태그를 표현하지 못하는 브라우저를 위한것이다.

구형 브라우저는 <canvas ...>태그를 인식하지 못하므로 <canvas ...></canvas>사이에 있는 문장을 브라우저에 그대로 노출시킨다.

하지만, <canvas>를 인식하는 브라우저는 <canvas>만을 표현하고, <canvas ...>와 </canvas>사이의 문장은 그냥 무시하게 된다.


Nagarry.css는 아래와 같고...

Nagarry.css

@CHARSET "UTF-8";

body

{

background:#555555;

margin:20px;

}


#CANVAS_1

{

background:#ffffff;

border:1px solid #000000;

}



지금까지의 결과를 브라우저에서 보면 이렇게 보일꺼다.


만약 Canvas영역(흰색 사각영역)이 나타나지 않고,

"Sorry, Your browser doesn't support HTML5 Canvas."라는 구문만 보인다면, 브라우저를 바꾸어야 한다.

크롬, 사파리, 파이어폭스, 오페라 브라우저를 사용한다면 별 탈없이 잘 보이지만,

(꽤 오래된 버젼이 아니라면 말이다)

인터넷익스플로어는 최소 9버젼 이상을 사용해야한다.


참고로, 브라우저의 HTML5지원 정도를 알아보고 싶으면

http://html5test.com/ 를 방문하면 된다. 보편적으로 어느 OS에서나 크롬이 젤 괜찮은 지원을 보여준다.

<550점이 만점의 html5 지원정도 -출처 : html5test.com)



다음포스팅에서는 Canvas를 javascript로 기초적으로 제어하는 포스팅을 할 예정이다.

Google AdSense

브라우저들의 HTML5호환성 리스트

브라우저의 지원점수 보는 사이트 - http://html5test.com


결론부터 말하자면,

PC, 타블렛, 스마트폰 모두 크롬을 쓰는게 맘편하다. ^^




PC에선 MS의 익터넷익스플로어가 늦었지만, 괄목할만한 지원을 나타내고 있다.

여전히 꼴찌이지만, 애플의 사파리에 근접하는 수준으로 올라왔다^^



타블렛 쪽은 구글의 크롬, 림(블랙베리)의 타블렛OS, 애플의 사파리가 그리 크지않은 점수차이로 400점 이상을 마크중



스마트폰에서도 구글, 림, 애플이 탑3를 형성하고 있지만, 블랙베리가 압도적인 1위를 차지하고 있다.



Google AdSense

+ Recent posts