Today I Learned #26

YoungToMaturityยท2021๋…„ 2์›” 3์ผ
1

Javascript

๋ชฉ๋ก ๋ณด๊ธฐ
16/17
post-thumbnail

paintJS - saving file

paintJS๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ๋ฆฐ ๊ทธ๋ฆผ์„ save ๋ฒ„ํŠผ์„ ํ†ตํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค.

์„ ์–ธ ๋ฐ ์ •์˜

const saveBtn = document.getElementById("jsSave"); ๋ฅผ ํ†ตํ•ด saveBtn์„ ์„ ์–ธํ•ด์ฃผ์—ˆ๋‹ค. ์ด๋ฏธ canvas ๋‚ด๋ถ€์— ์šฐํด๋ฆญ์„ ํ•˜๊ณ , save image as ๋ฉ”๋‰ด๋ฅผ ํ†ตํ•˜์—ฌ ์ €์žฅ์„ ํ•˜๋ฉด, fill ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ฐฐ๊ฒฝ์ด ๋น„์–ด์žˆ๋Š” ์ƒํƒœ๋กœ ์ €์žฅ๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” canvas์˜ ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ์ด ์ฑ„์›Œ์ง€์ง€ ์•Š์€ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ, ๊ธฐ์กด INITIAL_COLOR๋กœ fillStyle์„ ์ง€์ •ํ•˜๊ธฐ ์ด์ „์—,

ctx.fillStyle = "white";
ctx.fillRect(0,0,CANVAS_SIZE,CANVAS_SIZE);

๋ฅผ ํ†ตํ•ด ํ•˜์–€์ƒ‰์œผ๋กœ canvas๋ฅผ ์ฑ„์›Œ์ค€ ์ดํ›„์— ์ €์žฅ์„ ํ•˜๋ฉด ํ•ด๋‹น ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

handleCM

๊ธฐ๋ณธ์ ์ธ ์„ ์–ธ์„ ๋งˆ์ณค๋‹ค๋ฉด, ์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋˜ ์šฐํด๋ฆญ+save image as๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ง‰๊ณ  save ๋ฒ„ํŠผ์„ ํ†ตํ•ด ํŒŒ์ผ์˜ ์ €์žฅ์„ ํ•˜๋„๋ก ์œ ๋„ํ•ด๋ณด๊ฒ ๋‹ค. ๊ผญ ํ•„์š”ํ•œ ๊ณผ์ •์€ ์•„๋‹ˆ์ง€๋งŒ, javascript๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋งˆ์šฐ์Šค ์šฐํด๋ฆญ์„ ํ†ต์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์—ฐ์Šตํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์ง„ํ–‰ํ•˜์˜€๋‹ค. canvas.addEventListener("contextmenu", handleCM)์„ ํ†ตํ•ด ๋งˆ์šฐ์Šค ์šฐํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด handleCM ํ•จ์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ํ•˜์˜€๋‹ค. handleCM์˜ ๋‚ด๋ถ€์—์„œ๋Š” ์ธ์ž๋กœ์„œ ์ „๋‹ฌ๋ฐ›์€ event์— ๋Œ€ํ•ด event.preventDefault();๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜์—ฌ, ์šฐํด๋ฆญ์ด ์ •์ƒ์ ์œผ๋กœ context menu๋ฅผ ํ‘œํ˜„ํ•˜์ง€ ์•Š๋„๋ก ํ•˜์˜€๋‹ค.

handleSaveClick

์•ž์„œ ์„ ์–ธํ•ด์ค€ saveBtn์— "click" ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์‹คํ–‰๋˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜ handleSaveClick์€ HTMLCanvasElement.toDataURL()์˜ ๋ฌธ์„œ์™€ ๊ฐ™์ด

canvas.toDataURL(type, encoderOptions);

์œ„์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ , const image = canvas.toDataURL("image/png");๋ฅผ ํ†ตํ•ด์„œ image์•ˆ์— ํ•ด๋‹น data๋ฅผ ์„ ์–ธํ•ด์ฃผ๊ณ , HTML <a> ์š”์†Œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ, const link = document.createElement("a");๋กœ link ๋ผ๋Š” ์ด๋ฆ„์˜ anchor ์š”์†Œ๋ฅผ ์„ ์–ธํ•˜๊ณ , ํ•ด๋‹น ์š”์†Œ์˜ href์™€ download๋ฅผ ์ง€์ •ํ•œ ํ›„, ์•„๋ž˜์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด link.click() ์„ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜์—ฌ ์ €์žฅํ•ด์ค€๋‹ค.

link.href = image;
link.download = "paintJS[๐ŸŽจ]";
link.click();

์‹คํ–‰๊ฒฐ๊ณผ


ํ•ด๋‹น ํ™”๋ฉด์—์„œ save ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ ๊ฒฝ์šฐ paintJS[๐ŸŽจ]๋ผ๋Š” ํŒŒ์ผ๋ช…์œผ๋กœ ์ €์žฅ๋˜๋Š” ํŒŒ์ผ

profile
iOS Developer

0๊ฐœ์˜ ๋Œ“๊ธ€