Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발자입니다

노마드코더 JS로 그림앱 만들기) #1 THE CANVAS API - canvas, fillRect, moveTo, lineTo, fill, stroke, fillStyle, beginPath 본문

Javascript/노마드코더 - JS로 그림앱 만들기

노마드코더 JS로 그림앱 만들기) #1 THE CANVAS API - canvas, fillRect, moveTo, lineTo, fill, stroke, fillStyle, beginPath

끈기JK 2022. 10. 6. 08:41

<canvas> 태그 : js로 그래픽 그릴수 있게 하는 API

 

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Meme Maker</title>
    <link rel="stylesheet" href="style.css" />
</head>

<body>
    <canvas></canvas>
    <script src="app.js"></script>

</body>

</html>
/* style.css */
canvas {
    width: 800px;
    height: 800px;
    border: 5px solid black;
}

body {
    display: flex;
    justify-content: center;
    align-items: center;
}
// app.js
const canvas = document.querySelector("canvas");
const ctx = canvas.getContext("2d");  // 2d 그림 그리기 위해
canvas.width = 800;
canvas.height = 800;
// 기본 세팅

 

fillRect(x 시작위치, y 시작위치, 너비, 높이)

ctx.fillRect(50, 50, 100, 200);

 


 

rect() 이후 도형을 나타나게 하는 방법은 2가지가 있다.

fill() : 색을 가득 채운 도형이 나타난다.

stroke() : 테두리만 나타난다.

// app.js
ctx.rect(50, 50, 100, 100);
ctx.fill();

 

fillStyle 적용 후 fill() 했을 때 모든 도형 색깔이 바뀐다. 이유는 같은 경로로 이루어져 있기 때문이다.

ctx.rect(50, 50, 100, 100);
ctx.rect(150, 150, 100, 100);
ctx.rect(250, 250, 100, 100);
ctx.fill();
ctx.rect(350, 350, 100, 100);
ctx.fillStyle = "red";
ctx.fill();

 

beginPath() : 경로를 새로 지정해서 위 도형들과 경로를 분리시킨다.

ctx.rect(50, 50, 100, 100);
ctx.rect(150, 150, 100, 100);
ctx.rect(250, 250, 100, 100);
ctx.fill();

ctx.beginPath();
ctx.rect(350, 350, 100, 100);
ctx.fillStyle = "red";
ctx.fill();

 


 

rect()도 단축형이다. 아래와 같은 방법으로 사각형 그린다.

moveTo(x, y) : x, y 좌표 지점까지 브러쉬를 움직인다.

lineTo(x, y) : x, y 좌표 지점까지 선을 그리며 움직인다.

여기서 stroke()은 테두리만, fill()은 도형을 채운다.

ctx.moveTo(50, 50);
ctx.lineTo(150, 50);
ctx.lineTo(150, 150);
ctx.lineTo(50, 150);
ctx.lineTo(50, 50);
ctx.stroke();

 


 

-집 그리기

ctx.fillRect(200, 200, 50, 200);
ctx.fillRect(400, 200, 50, 200);
ctx.lineWidth = 2;  // 실행 순서때문에 아래 문장보다 위에 위치한다.
ctx.fillRect(300, 300, 50, 100);
ctx.fillRect(200, 200, 200, 20);
ctx.moveTo(200, 200);
ctx.lineTo(325, 100);
ctx.lineTo(450, 200);
ctx.fill();

 


 

-사람 그리기

arc(x, y, 반지름, 원 시작지점, 원 끝지점)

아래 그림의 0 부터 시작이다. 원 시작지점 및 끝지점에 몇 PI를 입력하느냐에 따라 원의 모양이 바뀐다.

참고사이트 : https://www.w3schools.com/tags/canvas_arc.asp

ctx.fillRect(210 - 40, 200 - 30, 15, 100);
ctx.fillRect(350 - 40, 200 - 30, 15, 100);
ctx.fillRect(260 - 40, 200 - 30, 60, 200);

ctx.arc(250, 100, 50, 0, 2 * Math.PI);
ctx.fill();

ctx.beginPath();
ctx.fillStyle = "white";
ctx.arc(260 + 10, 80, 8, 1 * Math.PI, 2 * Math.PI);
ctx.arc(220 + 10, 80, 8, 1 * Math.PI, 2 * Math.PI);
ctx.fill();