Canvas API ํ์ฉํ๊ธฐ
canvas api ๋ ๋ ธ๋ง๋์ฝ๋ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉฐ ์ฒ์ ์ ํ๋๋ฐ,
์ฌ์ค ์ฒ์ ๋ค์์ ๋ ๋๋ฌด ๋ณต์กํ ๋๋์ด์๊ณ , ์ดํด๊ฐ ์ ๋์ง ์์๋ค.
(์ ๋ง ๋ง ๊ทธ๋๋ก ๋ฐ๋ผ ์น๊ธฐ๋ง ํ์๋ค)
์ด์ฌ์๋ ๋ ธ๋ง๋์ฝ๋ ๊ฐ์๋ฅผ ์ถ์ฒํ๋ค! ๋ฌด๋ฃ๊ณ ๋๊ผฌ์ค์ด ์ค๋ช ๋ ์ํด์ฃผ์ฌ!
์ฝ ๋๋ฌ ๊ฐ์ ๊ฐ๋ฐ ๊ณต๋ถ ๊ณต๋ฐฑ์ด ์์๋ ํฐ๋ผ,
๊ฐ์๋ฅผ ๋ค์ผ๋ฉฐ cavas api ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ์ ๋ณต์ตํ๋ฉฐ mdn ๋ฌธ์๋ ๊ฐ์ด ๋ดค๋๋ฐ,
์์ ์ ๊ธฐ์ต์ด ๋ฌด์ํ๊ฒ ์ดํด๊ฐ ์ ๋๊ณ ์ฌ๋ฐ์๋ค.
๋จ์ํ๊ฒ ์๊ฐํ๋ฉด ๋๋ ๊ฒ๋ค์ ๋ณต์กํ๊ฒ๋ง ์๊ฐํ ๊ฒ ์๋๊ฐ ์ถ๋ค.
์ฐธ๊ณ ์ฌ์ดํธ
๐ mdn ํ๊ตญ์ด ๋ฒ์ (์ ๋ถ ๋ค ๋ฒ์ญ์ด ๋์ด์์ง ์๋ค)
๐ mdn ์์ด ๋ฒ์
๐ ๋ ธ๋งํธ์ฝ๋ ๊ฐ์ - ๋ฌด๋ฃ
Canvas API ๋ ๋ฌด์์ธ๊ฐ
๋ง ๊ทธ๋๋ก ์นํ๋ฉด์ ์บ๋ฒ์ค๋ก ํ์ฉํ ์ ์๋ ์ฌ๋ฐ๋ ๋๊ตฌ๋ค.
cavan api ๋ฅผ ์ฌ์ฉํ๋ WebGL ์ ์ฌ์ฉํ๋ฉด 2D ๋ฟ๋ง ์๋๋ผ 3D ์์ ๋ ํ ์ ์๋ค.
https://flaviocopes.com/canvas/
์ด ์ฌ์ดํธ์์๋ canvas api ๋ฅผ ์ด์ฉํ ์ฌ๋ฐ๋ ์์๋ค์ ๋ณผ ์ ์๋ค.
1. canvas ์ฌ์ฉํ๊ธฐ
canvas ์์ฑ์ ์ด์ฉํด canvas ๋ฅผ ๋ง๋ค์ด์ค๋ค.
<canvas></canvas>
canvas ์์๋ width ์ height ๋๊ฐ์ง ์์ฑ๋ง ๊ฐ์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์์ฑ๋ค์ ์ ํ์ฌํญ์ด๋ค.
๋๋ฌธ์ ์ด๋ ๊ฒ HTML ์์ ๋ฐ๋ก ์์ฑ์ ์จ์ฃผ์ง ์์๋ ๋๋ค.
JS ์ CSS ์์ canvas ์ ํฌ๊ธฐ๋ฅผ ์ค์ ํด์ค ์ ์๋ค.
2. ๋ํ ๊ทธ๋ฆฌ๊ธฐ
๋ํ ๊ทธ๋ฆฌ๊ธฐ์ ์์์ canvas์ ์ผ์ชฝ์ ๋ชจ์๋ฆฌ๊ฐ ๊ธฐ์ค์ด ๋๋ค. (0,0) ์ง์ .
JS ์์ context ๋ฅผ ์ ์ธํด ์ค ๋ค ๋ญ๊ฐ๋ฅผ ๊ทธ๋ฆด ์ ์๋ค.
function draw() {
var canvas = document.getElementById("canvas");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(75, 50);
ctx.lineTo(100, 75);
ctx.lineTo(100, 25);
ctx.fill();
}
}
๋ฉ์๋ ์ค๋ช
beginPath()
- ์ด์ ์ ๋ํ๊ณผ ๋ณ๊ฐ๋ก ์๋ก์ด ๋ํ์ด๋ ์ ์ ๊ทธ๋ฆด ๋ ์ฌ์ฉํ๋ค.
- ์ปฌ๋ฌ/์ ์ ๊ตต๊ธฐ ๋ฑ ๋ค๋ฅธ ์์ ๊ทธ๋ฆฌ๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์๋ค. ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ด์ ์ ๊ทธ๋ฆฐ ๋ํ๋ค๊ณผ ๋์ผํ๋ค๊ณ ๊ฐ์ฃผ๋๋ค.
moveTo(x, y)
- ํ์ ์ฎ๊ธด๋ค๊ณ ์ค๋ช ๋์ด์๋๋ฐ, ๊ทธ๊ฒ๋ณด๋จ ํ์ ๋ค๊ณ ์๋ ์์ด ํด๋น ์ขํ๋ก ์ด๋ํ๋ค๊ณ ์ดํดํ๋ ๊ฒ ๋ ํธํ๋ค.
- (x,y) ์ง์ ์์ ๋ ์๋ ํ์ ์ก์ ์์ ์์ํด๋ณด๋ฉด ๋จ!
- ์ค์ ๋ก ๊ทธ๋ ค์ง๋ ๊ฑด ์์.
- ์ฐ๊ฒฐ๋์ง ์์ ๊ฒฝ๋ก๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ฐ.
lineTo(x,y)
- ํ์ฌ์ ์์น์์ (x, y) ์ง์ ๊น์ง ์ค์ ๋ก ๊ทธ๋ ค์ง ๋ฐ๊ทธ๋ฆผ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
- moveTo(1,1) ํ lineTo(3,3) ๋ฅผ ์ ๋๋ค๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์๋น ์ ์ด ๊ทธ์ด์ง๋ ๊ฒ.
(์ดํ ์์น ํน์ ์ ๊ทธ๋ฆฌ๊ธฐ๋ฅผ ํ์ง ์์ผ๋ฉด ๋ํ์ด ๋ณด์ด์ง ์์ ์๋ ์๋ค)
fill()
- lineTo() ๋ฑ์ ๋ฉ์๋๋ก ๋ง๋ ๋ํ์ ๋ฉด์ ์ ์ฑ์ด๋ค.
- fillStyle = 'color' ๋ก ์ปฌ๋ฌ๋ฅผ ์ง์ ํ ์ ์๋ค.
stroke()
- lineTo() ๋ฑ์ ๋ฉ์๋๋ก ๋ง๋ ๋ํ์ ์ ์ ์น ํ๋ค.
- strokeStyle = 'color'๋ก ์ปฌ๋ฌ๋ฅผ ์ง์ ํ ์ ์๋ค.
3. ์ด๋ฏธ์ง ์ฌ์ฉํ๊ธฐ
https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Using_images
const img = new Image(); // Create new img element
img.src = "myImage.png"; // Set source path
ctx.drawImage(image, dx, dy, dWidth, dHeight)
Image() ๋ฅผ ์ ์ธํด์ฃผ๊ณ , src ์ ์ด๋ฏธ์ง ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์จ์ฃผ๋ฉด ๋๋ค.
์ดํ drawImage() ๋ก ์ด๋ฏธ์ง๋ฅผ ์บ๋ฒ์ค์ ๊ทธ๋ ค์ฃผ๋ฉด ๋๋๋ฐ,
drawImage(์ ์ธํ ์ด๋ฏธ์ง, ์ด๋ฏธ์ง๊ฐ ์์ํ x์ถ ์์น, ์ด๋ฏธ์ง๊ฐ ์์ํ y์ถ ์์น, ์ด๋ฏธ์ง์ x ์ถ ๋๋น, ์ด๋ฏธ์ง์ y์ถ ๋๋น) ์ด๋ ๊ฒ ์์ฑํด์ฃผ๋ฉด ๋๋ค.
context.drawImage(
image,
0,
0,
CANVAS_WIDTH,
CANVAS_HEIGHT
);
๊ฐ๋ น ์ด๋ ๊ฒ ์จ์ค ๊ฒฝ์ฐ์
์ด๋ฏธ์ง๋ฅผ ์บ๋ฒ์ค (0,0) ์ ์ง์ ๋ถํฐ canvas ํฌ๊ธฐ๋งํผ ๊ทธ๋ฆฌ๊ฒ ๋ค๋ ์๋ฏธ์ธ๋ฐ,
๊ฐ๋จํ ๋งํ๋ฉด ์บ๋ฒ์ค ์ ์ฒด๋ฅผ ๊ฝ ์ฑ์ฐ๊ฒ ๋จ ๋ป์ด๋ค.
ํ์ผ์ฒจ๋ถํ ์ด๋ฏธ์ง ํ์ผ์ ๋ถ๋ฌ์จ ํ onload() ํจ์๋ฅผ ํจ๊ป ํ์ฉํด ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ฆด ์๋ ์๋ค.
const fileInput = document.getElementById("file");
function onFileChange(event) {
const file = event.target.files[0];
const url = URL.createObjectURL(file);
const image = new Image();
image.src = url;
image.onload = function () {
ctx.drawImage(image, 0, 0, CANVAS_WIDTH, CANVAS_HEIGHT);
fileInput.value = null;
};
}
fileInput.addEventListener("change", onFileChange);
canvas Api ๋ฅผ ์ฌ์ฉํ๊ธฐ์ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ์ ์ ๋ฆฌํด๋ดค๋ค.
์์ผ๋ก ๋ณด์ถฉํ ๋ด์ฉ์ด ์๋ค๋ฉด ๋ ์ถ๊ฐํด๋ณผ ์์ !