ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Canvas(1)_Canvas에 대하여
    Canvas 2022. 10. 12. 17:59

    해당 게시글은 2022.03.10에 깃허브로 작성되었습니다.

     


     

    1. canvas란?

    Canvas API는 Javascript와 HTML <canvas> 엘리먼트를 통해 그래픽을 그리기 위한 수단을 제공한다.

     

    codepen이나 awwwards 사이트를 보던 중 canvas가 사용된 경우를 본 적이 있을 것이다.

    그렇듯 애니메이션, 게임 그래픽, 데이터 시각화, 사진 조작 및 실시간 비디오 처리를 위해 사용되는 것이 canvas다.

     

    주로 2D 그래픽에 중점을 두고 있으며, WebGL API 또한 <canvas> 엘리먼트를 사용한다.

     

    간단한 예제를 보며 기본 작동 원리를 배워보자.

     


     

    2. 기본 원리

    (1) <canvas> 요소

    <canvas> 요소는 width와 height의 두 속성을 지닌다. width와 height 속성을 지정하지 않으면 canvas의 처음 너비는 300px이고 높이는 150px이다.

     

    CSS로 <canvas>의 크기를 임의로 정할 수 있지만 렌더링하는동안 이미지는 레이아웃의 크기에 맞게 조정된다. 그러므로 초기 canvas의 비율을 고려하지 않고 CSS로 크기를 지정하면 왜곡되어 나타날 수 있기에 <canvas> 속성에서 width와 height 속성을 명시하는 편이 좋다.

     

    (2) 대체 콘텐츠

    <canvas>요소는 canvas를 지원하지 않는 오래된 브라우저(인터넷 익스플로러9 이하의 버전이나 텍스트기반 브라우저)들을 위한 대체 콘텐츠를 정의하기 쉬운데

     

    그저 <canvas> 안에 대체 콘텐츠를 기입하면 된다.

    <!-- TEXT -->
    <canvas id="stockGraph" width="150" height="150">
      current stock price: $3.15 +0.15
    </canvas>
    
    <!-- IMAGE -->
    <canvas id="clock" width="150" height="150">
      <img src="images/clock.png" width="150" height="150" alt=""/>
    </canvas>

    위와 같이 대체적으로 텍스트 또는 이미지를 삽입하는 방식을 사용한다.

     

    (3) 렌더링 컨텍스트

    <canvas> 요소는 고정된 크기의 드로잉 영역을 생성하며, 그 영역은 '보여질 콘텐츠를 생성하고 다루게 될' 하나 이상의 렌더링 컨텍스트(rendering contexts)를 노출시킨다.

    <canvas id="canvas" width="150" height="150"></canvas>

    canvas는 처음에 비어있으며, 무엇인가를 표시하기 위해서는 스크립트가 렌더링 컨텍스트에 접근하여 그리도록 해야 한다.

    <canvas>는 getContext() 메서드를 호출해서 렌더링 컨텍스트와 그리기 함수들을 사용할 수 있다.

     

    getContext() 메서드는 렌더링 컨텍스트 타입을 지정하는 하나의 파라미터를 가진다. (2D | 3D)

    var canvas = document.getElementById("canvas");
    var ctx = canvas.getContext("2d");

     

    (4) 지원여부 검사

    스크립트를 통해 getContext() 메서드존재 여부를 확인함으로써 프로그래밍 방식으로 지원하는지를 확인할 수 있는데 아래와 같이 작성하면 된다.

    var canvas = document.getElementById('canvas');
    
    if (canvas.getContext){
      var ctx = canvas.getContext('2d');
      // canvas 내용 코드 기입
    } else {
      // canvas가 지원되지 않는다는 텍스트 기입
    }

     

    (5) 템플릿

    그럼 이제 html과 연결하여 canvas의 가장 최소한의 템플릿을 작성해보자.

      <style type="text/css">
        canvas {border: 1px solid black;}
      </style>
    
      <body onload="draw();">
        <canvas id="tutorial" width="150" height="150"></canvas>
        <script type="application/javascript" src="./js/script.js"></script>
      </body>
      function draw(){
        var canvas = document.getElementById('tutorial');
        if (canvas.getContext){
          var ctx = canvas.getContext('2d');
        }
      }

    위와 같이 html 내에서 draw 메서드를 호출하기 위해 <body onload="draw();">를 작성했다.

    앞서 언급했듯 canvas는 그려지도록 해줄 함수가 필요하므로 canvas를 사용하고 싶은 영역의 태그에서 메서드를 호출해주면 그려지게 된다.

     

    이와 비슷하게 페이지 로딩이 완료될 때 실행시켜주는 함수로는 window.setTimeout() | window.setInterval() 등이 있다.

     


     

    이렇게 간단하게 canvas의 기본 원리에 대해 배워봤다.

    다음 시간에는 직접 도형을 그려보며 그려지는 원리에 대해 배워보자.

    'Canvas' 카테고리의 다른 글

    Canvas(6)_변형  (0) 2022.10.13
    Canvas(5)_이미지 사용하기  (1) 2022.10.13
    Canvas(4)_텍스트 그리기  (0) 2022.10.13
    Canvas(3)_스타일과 색 적용  (0) 2022.10.13
    Canvas(2)_도형 그리기  (0) 2022.10.13
Designed by Tistory.