본문 바로가기
프로그래밍 언어/HTML5

[HTML] 그래픽

by cogito21_cpp 2024. 8. 2.
반응형

Canvas와 SVG 비교

작업 환경에 따른 비교

- 화면이 작거나, 픽셀 수가 많을 경우(>10k): canvas 추천

- 화면이 크거나, 픽셀 수가 적을 경우(<10k): svg 추천

렌더링 시간에 따른 비교

작업 종류에 따른 비교

-복잡하고 고성능의 애니메이션(animation) 작업이나 동영상 조작의 작업: canvas 추천

- 고품질의 문서 작업이나 정적 이미지의 조작 작업: svg 추천

Canvas와 SVG의 차이점

Canvas SVG
픽셀(pixel) 기반 모양(shape) 기반
단일 HTML 요소 DOM의 일부분이 되는 다중 그래픽 요소
스크립트(script)를 통해서만 수정할 수 있음. 스크립트(script) 및 CSS를 통해서도 수정할 수 있음.
그래픽이 주작업인 게임에 적합함. 렌더링 영역이 넓은 응용 프로그램(application)에 적합함.

Canvas

- canvas는 그래픽ㅇ르 위한 container 역할만을 수행. 그래픽을 그리기 위해서는 JavaScript 같은 스크립트 언어 필요

- canvas 요소는 테두리와 컨텐츠가 없는 단순한 사각형의 공간. style 속성을 사용하여 크기 설정 필요

- script에서 canvas에 접근하기 위해서는 요소의 id 속성을 이용

<canvas id="drawCanvas" style="width:300px; height:200px; border: 1px solid #993300;">
    canvas 요소를 지원하지 않습니다!!
</canvas>

 

- 사각형 그리기

함수 설명
fillStyle() 사각형 영역을 채울 색상을 설정. 색상값만을 사용할 수도 있고, 투명도까지 명시
fillRect() 사각형을 그리기 시작할 시작점의 x, y좌표와 사각형의 너비, 높이 등을 설정
strokeRect(x, y w, h) 사각형 영역에 테두리를 그릴 때 사용
clearRect() 지정된 사각형 영역을 투명하게 만듦
context.strokeRect(10, 10, 250, 130);
context.fillStyle = "rgba(255,0,0,1)";
context.fillRect(20, 20, 200, 100);
context.clearRect(30, 30, 150, 50);

- 선 그리기

함수 설명
moveTo() 선이 시작될 좌표를 설정
lineTo() 선이 끝나는 좌표를 설정
lineTo() 함수를 연속적으로 사용할 때의 시작 위치는 이전 선 그리기가 끝난 위치로 자동 설정
stroke() 선 그리기 시작
context.moveTo(0, 0);
context.lineTo(300, 200);
context.lineTo(150, 0);
context.lineTo(0, 0);
context.fillStyle = "#0099FF";
context.fill();
context.stroke();

- 원 그리기

함수 설명
beginPath() 도형 그리기를 시작
arc(x, y, r, start_rad, end_rad) 원의 중심 좌표와 반지름, 원을 그리기 시작할 시작 위치와 종료 위치의 좌표, 그리는 방향 등을 설정
closePath() 도형 그리기를 마침
context.beginPath();
context.moveTo(100, 100);
context.arc(100, 100, 120, 0, 45 * Math.PI / 180);
context.closePath();
context.stroke();

- 텍스트 그리기

함수 설명
font() 텍스트의 크기, 폰트(font)와 색상 등을 설정
fillText(content, x, y) 텍스트의 내용과 텍스트를 그리기 시작할 시작 위치의 좌표를 설정
strokeText() 테두리만 있는 텍스트를 그릴 때 사용
context.font = "40px Arial";
context.fillText("CANVAS", 50, 90);
context.strokeText("HTML5", 80, 150);

- 그래디언트 그리기

    -  생성된 그래디언트는 fillStyle이나 strokeStyle 속성을 이용하여 그림

함수 설명
createLinearGradient(start_x, start_y, end_x, end_y) 선형 그래디언트를 그리기 시작할 시작 위치와 종료 위치의 좌표를 설정
createRadialGradient(start_x, end_y, start_r, end_x, end_y, end_r) 원형 그래디언트를 그리기 시작할 큰 원의 중심 좌표, 반지름과 그래디언트가 끝날 작은 원의 중심 좌표, 반지름 등을 설정
addColorStop() 그래디언트의 색을 설정. 시작점인 0에서부터 종료점인 1까지 다양한 색 지정이 가능
var gradient = context.createLinearGradient(0, 0, 200, 0);
gradient.addColorStop(0, "#FFCC00");
gradient.addColorStop(1, "#FFCCCC");
context.fillStyle = gradient;
context.font = "45px Arial black";
context.fillText("CANVAS", 15, 120);
var gradient = context.createRadialGradient(100, 100, 200, 150, 150, 30);
gradient.addColorStop(0, "black");
gradient.addColorStop(1, "white");
context.fillStyle = gradient;
context.fillRect(0, 0, 300, 300);

- 이미지 그리기

함수 설명
drawImage(url, x, y) canvas 요소에 그릴 이미지의 주소와 이미지가 그려질 시작 위치를 설정함.
<p><button onclick="drawImage()">이미지 그리기</button></p>

<script>
  function drawImage() {
    var srcImg = document.getElementById("Apple");
    context.drawImage(srcImg, 10, 10);
  }
</script>

 

SVG

- svg 요소는 Scalable Vector Graphics를 의미

- XML 기반의 W3C 그래픽 표준 권고안

- canvas로는 벡터 이미지 표현이 불가능하지만 svg는 픽셀의 영향을 받지 않는 벡터 이미지를 표현

- 도표나 그래프 등 벡터 기반의 다이어그램을 표현

- 사각형 그리기

<rect> 속성 설명
width 도형의 너비를 설정함.
height 도형의 높이를 설정함.
stroke 도형의 테두리 색상을 설정함.
stroke-width 도형의 테두리 굵기를 설정함.
fill 도형을 채울 색상을 설정함.
opacity 도형의 투명도를 설정함.
x 사각형의 왼쪽 위 꼭짓점의 x좌표를 설정함
y 사각형의 왼쪽 위 꼭짓점의 y좌표를 설정
rx 사각형 모서리 굴곡의 x축 반지름을 설정
ry 사각형 모서리 굴곡의 y축 반지름을 설정
<svg width="200" height="150">
    <rect width="200" height="150" stroke="orange" stroke-width="5" fill="yellow"/>
    svg 요소를 지원하지 않습니다!!
</svg>

<svg width="200" height="150">
    <rect width="200" height="150" style="stroke:orange; stroke-width:5; fill:yellow; opacity:1;"/>
</svg>


<svg width="250" height="200">
    <rect width="200" height="150" x="20" y="20" rx="20" ry="20"
        stroke="orange" stroke-width="5" fill="yellow"/>
</svg>
반응형

'프로그래밍 언어 > HTML5' 카테고리의 다른 글

[HTML] 요약  (0) 2024.08.02
[HTML] 이미지/멀티미디어  (0) 2024.08.02
[HTML] 폼(양식)  (0) 2024.08.02
[HTML] 링크/목록/표  (0) 2024.08.02
[HTML] HTML5 텍스트 요소  (0) 2024.08.02