3. 이미지 그리기


* 이미지 객체 생성

캔버스에 이미지를 그리기 위해서는 이미지를 담을 이미지 객체가 필요하다.

var img = new Image();


* 이미지 로딩과 onload

1
2
3
4
5
img.onload = function() // 이미지 로딩이 완료되면 함수 코드 실행
{
    ... // 이곳에 img 객체에 로드된 이미지를 그리는 코드 작성
}
img.src = "test.png"; // img 객체에 test.png 파일로부터 이미지 로딩 시작
cs

이미지 로딩이 완료되어야 이미지를 그릴 수 있으므로, 이미지 로딩을 지시하기 전 
img.onload 리스너에 이미지가 로딩되었을 때 이미지를 그리는 자바스크립트 코드를 등록해둔다.

* 이미지 그리기
이미지 로딩이 완료되면 컨텍스트 객체의 drawImage() 메소드를 이용하여 이미지를 그린다.
drawImgage()는 다음 몇 가지 유형이 있다.

- 원본 크기로 그리기
원본 이미지 크기 그대로 그리는 drawImage()는 다음과 같다
1
2
3
drawImage(img, dx, dy)
img : 이미지 객체
dx, dy : 이미지가 그려질 캔버스 좌표 (dx, dy)
cs
img 객체에 든 비트맵 이미지를 원본 크기로 캔버스의 (dx, dy) 위치에 그린다

- 크기 조절하여 그리기
원본 이미지의 크기를 조절하여 그리는 drawImage()는 다음과 같다

1
2
drawImage(img, dx, dy, dWidth, dHeight)
dWidth, dHeight : 이미지가 그려지는 크기, dWidth X dHegiht
cs

img 객체의 비트맵 이미지를 캔버스의 (dx, dy) 위치에 dWidthxdHegiht 크기로 변형하여 그린다.

- 원본의 일부분을 크기 조절하여 그리기
원본 이미지의 일부분을 택하고 크기를 조절하여 그리는 drawImage()는 다음과 같다

1
2
3
drawImage(img, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
sx, sy : img 이미지 내 비트맵 좌표 (sx, sy)
sWidth, sHeight : 그리기 위해 선택한 img 내의 비트맵 크기, sWidth X sHeight
cs

img 이미지 내부의 (sx, sy) 위치에서 sWidth X sHeight 영역의 비트맵을,

캔버스의 (dx, dy) 위치에 dWidth X dHeight 크기로 변형하여 그린다.


* 이미지 그리기 사례

- (20,20) 위치에 원본 크기로 그리기

캔버스의 (20,20)에 test.png 이미지를 원본 크기로 그리는 코드는 다음과 같다

1
2
3
4
5
6
var img = new Image();
img.onload = function() // 이미지 로딩이 완료되면 실행되는 함수
{
    context.drawImage(img,20,20); // img의 비트맵 이미지를 (20,20)에 원본 크기로 그린다.
}
img.src = "test.png"; //이미지 로딩을 시작시킨다
cs



- (20,20) 위치에 100 X 200 크기로 그리기

캔버스의 (20,20) 위치에 test.png 이미지를 100 X 200 크기로 그리는 코드는 다음과 같다

1
2
3
4
5
6
var img = new Image();
img.onload = function() // 이미지 로딩이 완료되면 실행되는 함수
{
    context.drawImage(img,20,20,100,200); // img를 (20,20)에 100X200 크기로 그린다.
}
img.src = "test.png"; //이미지 로딩을 시작시킨다
cs




- 캔버스에 꽉 차게 이미지 그리기

캔버스의 크기는 canvas.width와 canvas.height로 알아낼 수 있다.

이들을 이용하여 캔버스에 꽉 차도록 test.png 이미지를 그리는 코드는 다음과 같다

1
2
3
4
5
6
var img = new Image();
img.onload = function() // 이미지 로딩이 완료되면 실행되는 함수
{
    context.drawImage(img,0,0,canvas.width,canvas.height); 
}
img.src = "test.png"; //이미지 로딩을 시작시킨다
cs



예제 11-9. 캔버스의 (20,20)에서 100 X 200 크기로 변형하여 이미지 그리기.

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
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>(20, 20)에 100x200 크기로 그리기</title>
</head>
<body>
<h3>(20, 20)에 100x200 크기로 그리기</h3>
<hr>
<canvas id="myCanvas"
        style="background-color:aliceblue"
         width="300" height="250"></canvas>
<script>
    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");
 
    var img = new Image();
    img.onload = function () {
        context.drawImage(img, 2020100200);
    }
    img.src = "media/elsa.png";
</script>
</body>
</html>
 
cs


예제 11-10. 캔버스에 꽉 차게 이미지 그리기

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
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>캔버스에 꽉 차게 이미지 그리기</title>
</head>
<body>
<h3>캔버스에 꽉 차게 이미지 그리기</h3>
<hr>
<canvas id="myCanvas"
        style="background-color:aliceblue"
         width="500" height="300"></canvas>
<script>
    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");
 
    var img = new Image();
    img.onload = function () {
        context.drawImage(img, 00, canvas.width, canvas.height);
    }
    img.src = "media/elsa.png";
</script>
</body>
</html>
 
cs


Posted by 너래쟁이
: