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
๋ฅผ ์ฑ์์ค ์ดํ์ ์ ์ฅ์ ํ๋ฉด ํด๋น ํ์์ ํด๊ฒฐํ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ธ ์ ์ธ์ ๋ง์ณค๋ค๋ฉด, ์์ ์ธ๊ธํ๋ ์ฐํด๋ฆญ+save image as
๋ฅผ ํตํด ํ์ผ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ๋ง๊ณ save
๋ฒํผ์ ํตํด ํ์ผ์ ์ ์ฅ์ ํ๋๋ก ์ ๋ํด๋ณด๊ฒ ๋ค. ๊ผญ ํ์ํ ๊ณผ์ ์ ์๋์ง๋ง, javascript๋ฅผ ํ์ฉํ์ฌ ๋ง์ฐ์ค ์ฐํด๋ฆญ์ ํต์ ํ๋ ๋ฐฉ๋ฒ์ ์ฐ์ตํ๊ธฐ ์ํ์ฌ ์งํํ์๋ค. canvas.addEventListener("contextmenu", handleCM)
์ ํตํด ๋ง์ฐ์ค ์ฐํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด handleCM
ํจ์๊ฐ ๋ฐ์ํ๋๋ก ํ์๋ค. handleCM
์ ๋ด๋ถ์์๋ ์ธ์๋ก์ ์ ๋ฌ๋ฐ์ event
์ ๋ํด event.preventDefault();
๋ฅผ ์คํํ๋๋ก ํ์ฌ, ์ฐํด๋ฆญ์ด ์ ์์ ์ผ๋ก context menu
๋ฅผ ํํํ์ง ์๋๋ก ํ์๋ค.
์์ ์ ์ธํด์ค 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[๐จ]
๋ผ๋ ํ์ผ๋ช
์ผ๋ก ์ ์ฅ๋๋ ํ์ผ