일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- MySQL
- CSS
- Git
- scroll 맨 밑
- 페이지 내 탭
- dispatcherservlet 오류
- 탭 활용해 내용바꾸기
- tabs switch
- js 객체생성
- js session
- response property
- MySQL update delete
- ReactMediaRecorder
- SWEA 6190 python
- js canvas
- javascript
- SWEA 1954 java
- SWEA 11315 python
- SWEA 1228 python
- GitHub
- web recorder
- java
- jQuery EventListener
- $.ajax 사용
- sw8931
- request property
- scanner bufferedreader
- js XML 읽기
- Canvas
- scroll 맨 밑 이동
Archives
- Today
- Total
Daily Pogle
[Javascript] Canvas API - 그림판 구현하기2 본문
2023.01.10 - [웹 개발/Javasript] - [Javascript] Canvas API - 그림판 구현하기
[Javascript] Canvas API - 그림판 구현하기
그림판에 필요한 기능에 대해서 하나하나씩 살펴보면서 코드를 구현한다. 그전에 이전 포스팅에서 간단하게 canvas 를 만들어서 그림판을 설정한다. body 태그 안에 canvas 태그를 설정한다, canvas 태
pogle-jeong.tistory.com
기능 5. 텍스트 입력해서 삽입하기
텍스트 바에 삽입할 텍스트를 적고, canvas 를 더블클릭하면 해당 텍스트가 십입 될 수 있도록 기능한다.
[HTML]
<input type="text" placeholder="Write and then double click" id="text"/>
[JS]
- ctx.save() 는 현재 ctx 의 모든 속성을 저장하는 역할을 한다.
- ctx.restore() 는 ctx.save() 에 저장된 ctx 속성을 다시 복구시킨다.
- 텍스트도 ctx 의 속성이 적용되기 때문에 구분해주기 위해 사용한다.
- ctx.strokeText(텍스트, x위치, y위치) 는 ctx 에 텍스트로 채워주는(삽입) 역할을 한다.
const textInput = document.getElementById("text");
function onDoubleClick(event) { // 더블클릭한 위치에 text 넣기
ctx.save(); // 현재 ctx 상태를 저장
const text = textInput.value;
ctx.lineWidth = 1;
ctx.font = '48px serif'; // 폰트변경 가능
ctx.strokeText(text, event.offsetX, event.offsetY); // text를 원하는 현재 커서 위치에 넣기
ctx.restore(); // 저장한 ctx 상태로 복구
}
canvas.addEventListener("dblclick", onDoubleClick); // 더블클릭시 작동
기능 6. 이미지 파일 추가하기
[HTML]
- input type="file" 은 파일 업로드 기능을 지원하게 해준다
- accept 는 파일 중에서 어떤 형식의 파일을 허용할 것인지 알려준다.
- 이미지 형식파일만 허용할 것이므로 image/* 를 사용한다(png, jpg 등 이미지 형식 모두 허용)
<input type="file" accept="image/*" id="file"/>
[JS]
- input 태그를 통해 이미지 파일을 업로드 하면 input 태그의 files 속성에 이미지파일에 대한 정보가 URL 형식으로 저장된다. 이를 const file 을 거쳐 const url 에 저장시켜준다.
- const image = new Image() 는 document.createElement('img') 와 같은 역할을 한다.\
- img 가 만들어지고 로드 되면 함수를 실행한다.
- ctx.drawImage() 는 이미지파일로 canvas 를 채우는 함수이다.
const fileInput = document.getElementById("file");
function onFileChange(event) {
const file = event.target.files[0]; // 유저가 업로드한 파일은 브라우저의 메모리에 저장되있음
const url = URL.createObjectURL(file); // URL 을 통해 호출 (업로드한 브라우저안에서 사용)
const image = new Image(); // create element <img>
image.src = url;
image.onload = function() { //img 태그가 로드되면 바로 실행
ctx.drawImage(image, 0, 0,CANVAS_WIDTH, CANVAS_HEIGHT);
};
}
fileInput.addEventListener("change",onFileChange);
기능 7. 저장기능 추가하기
지금까지 작성한 이미지를 내 파일로 저장하는 기능을 한다.
[HTML]
<button id="save-btn">Download</button>
[JS]
- canvas.toDataURL() 은 현재 작성된 canvas 에 대한 정보를 URL DATA로 저장하는 함수이다. 실제로 확인해보면 사이즈가 큰 URL 정보가 나타난다.
- a 태그를 통한 가짜링크를 생성해서 다운로드 받을 수 있도록 한다.
- a 태그의 링크는 canvas 정보인 url 이다.
- a 태그로 다운로드 받으면 파일명은 "myDrawing.png" 이다. >> a.download = "저장할 파일명"
- a 태그를 자동적으로 클릭할 수 있도록 해준다. >> a.click()
const saveBtn = document.getElementById("save-btn");
function onSaveClick() {
const url = canvas.toDataURL(); //이미지를 URL DATA 로 표현하고 변수에 저장.
const a = document.createElement("a"); // 가짜링크생성, a태그의 download 옵션 사용
a.href = url;
a.download = "myDrawing.png"; // DOWNLOAD 명
a.click(); // (가짜)링크선택 - 다운로드받기
}
saveBtn.addEventListener("click",onSaveClick);
'Programming language > Javasript' 카테고리의 다른 글
[Javascript] XML 활용하기(XMLHttpRequest) (0) | 2023.02.01 |
---|---|
[Javascript] 한 페이지안에서 탭을 이용해 내용바꾸기 (0) | 2023.01.16 |
[Javascript] Canvas API - 그림판 구현하기 (0) | 2023.01.10 |
[Javascript] Canvas API - 간단한 기능구현(2) (0) | 2022.12.28 |
[Javascript] Canvas API - 간단한 기능구현(1) (0) | 2022.12.26 |