1、需求
实际开发中,经常需要将
网页元素转换为图片
,以便进行保存、分享或打印等用途。,一般想到的方案就是canvas
比如这个,需要把这个DOM转化成一个图片
2、html2canvas
html2canvas
可以把DOM结构转化成一个canvas标签
使用方法
// npm 下载插件
npm install html2canvas
// 项目引入插件
import html2canvas from 'html2canvas';
这个方法有两个参数,一个是 目标元素,一个是配置项
html2canvas(document.body).then(function(canvas) {
document.body.appendChild(canvas);
});
3、实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
position: relative;
width: 400px;
height: 300px;
}
.watermark {
position: absolute;
left: 10px;
bottom: 10px;
padding: 10px;
color: #fff;
background-color: rgba(0, 0, 0, .6);
border-radius: 10px;
}
</style>
</head>
<body>
<div class="box">
<img src="./images/img4.jpg" alt="" width="400px">
<div class="watermark">
<div>名称:呆呆狗</div>
<div>时间:2024-03-19</div>
</div>
</div>
<button>生成图片</button>
<script src="https://cdn.bootcdn.net/ajax/libs/html2canvas/1.4.1/html2canvas.js"></script>
<script>
let btnEl = document.querySelector('button');
btnEl.addEventListener('click', function () {
html2canvas(document.querySelector('.box'), {
scale: window.devicePixelRatio * 2
}).then(canvas => {
// 这里返回的是一个 canvas 标签
// document.body.appendChild(canvas);
const base64Data = canvas.toDataURL('image/jpeg')
var link = document.createElement('a');
link.href = base64Data;
link.style.display = 'none';
link.download = '有水印的.jpeg';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
})
})
</script>
</body>
</html>