Project/Final (20.10.05-20.11.17)
2020.10.30.(금) 파이널 프로젝트 - html2canvas : html을 이미지로 저장
myspace
2020. 10. 31. 13:50
버튼 누르면 div 영역이 캡쳐 돼서 이미지로 저장 됨.
1. pom.xml
<!-- html2canvas -->
<dependency>
<groupId>org.webjars.npm</groupId>
<artifactId>html2canvas</artifactId>
<version>0.5.0-beta4</version>
</dependency>
2. kakaoshare.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%request.setCharacterEncoding("UTF-8");%>
<%response.setContentType("text/html; charset=UTF-8");%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Kakao Sharing</title>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://developers.kakao.com/sdk/js/kakao.js"></script>
<script src="https://html2canvas.hertzen.com/dist/html2canvas.min.js"></script>
<script src="resources/js/kakaoshare.js" defer></script>
<script src="resources/js/imgdownload.js" defer></script>
<link rel="stylesheet" type="text/css" href="resources/css/kakaoshare.css">
</head>
<body>
<div>
<img src="resources/image/park.JPG" alt="london park" width="400" height="200" id="kakao-link-btn" onclick="sendLink()">
<button id="kakao-link-btn" onclick="sendLink()">공유하기</button>
<button id="kakao-link-btn" onclick="dailyLink()">daily 공유</button>
<button id="kakao-link-btn" onclick="etcLink()">weekly/monthly 공유</button>
</div>
<div id="capture" style="padding: 10px; background:#f5da55">
<h4 style="color: #000; ">Hello world! Capture Test!</h4>
</div>
<button id="saveImg">html 화면 캡쳐해서 이미지로 변경</button>
<a id="download" download="hitmap.JPG">
<button type="button" onClick="download()">Download</button>
</a>
<!-- <canvas id="myCanvas" width="720" height="450">
Your browser does not support Canvas.
</canvas> -->
<div style="background:red;" id="test">
<div style="background:green;">
<div style="background:blue;border-color:white;">
<div style="background:yellow;">
<div style="background:orange;">
<img src="resources/image/paris.JPG" alt="paris" width="400" height="200">
<h1>Heading</h1>
Text that isn't wrapped in anything.
<p>
Followed by some text wrapped in a <b> paragraph.</b>
</p>
Maybe add a <a href="#">link</a> or a different style of <a href="#" style="background:white;" id="highlight">link with a highlight</a>. <hr/>
<h2>More content</h2>
<div style="width:10px;height:10px;border-width:10px;padding:0;">
a
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
3. imgdownload.js
// 버튼 클릭할 시 캡처한 내용 body에 붙이기
$('#saveImg').click((e) => {
html2canvas(document.querySelector("#capture")).then(canvas => {
document.body.appendChild(canvas)
});
});
/* html2canvas - 흰 화면 그대로 저장 */
/*function download(){
var download = document.getElementById("download");
var image = document.getElementById("myCanvas").toDataURL("image/png")
.replace("image/png", "image/octet-stream");
download.setAttribute("href", image);
//download.setAttribute("download","archive.png");
}*/
/* html2canvas - div 영역이 아닌 전체화면 스크린샷 */
/*html2canvas(document.body).then(function(canvas) {
canvas.setAttribute("id", "mycanvas");
canvas.setAttribute("style", "display:none");
document.body.appendChild(canvas);
download();
});*/
/* html2canvas - div 영역 스크린샷 */
html2canvas(document.querySelector("#test")).then(function(canvas) {
canvas.setAttribute("id", "mycanvas");
canvas.setAttribute("style", "display:none");
document.body.appendChild(canvas);
download();
});
function download() {
var image = document.getElementById("mycanvas")
.toDataURL("image/png")
.replace("image/png", "image/octet-stream");
var download = document.getElementById("download")
.setAttribute("href", image);
}
참고 사이트
JS만으로 화면을 찍어 이미지로 다운받기
1. JS를 이용해서 화면에 있는 내용을 SVG로 변환 https://html2canvas.hertzen.com/ 위 라이브러리는 화면에 대한 내용이 바로 아래에 SVG로 나타나는 것을 확인할 수 있습니다. 메뉴 Examples에서 예제를 통해
irpro.tistory.com