js + html2canvas 实现截图
html:
<div style="margin: 160px 200px;">
<div id="html2canvas" style="display: flex;">
<div>
<img class="qrcode_img" src="" alt="" style="width: 115px;height: 115px;;display: block;background-color: red;">
</div>
<div>
<ul class="qrcode_text">
<li><span>品种:</span><a>哈哈哈哈</a></li>
<li><span>产地:</span><a>哈哈哈哈</a></li>
<li><span>生产日期:</span><a>2020-15-18</a></li>
<li><span>详细信息:</span><a>哈哈哈哈</a></li>
</ul>
</div>
</div>
<div class="area-screenShot" style="margin: 30px 100px;">
<button id="screenShot">生成图片</button>
</div>
</div>
<script type="text/javascript" src="../js/included/jquery/jquery.min.js"></script>
<script type="text/javascript" src="../js/included/html2canvas/html2canvas.js"></script>
粗糙js法:
// 第一种最粗糙的写法:可以得到图片,但图片不清晰,并且图片的大小没有设置,截取位置固定
$("#screenShot").click(() => {
html2canvas($("#html2canvas")).then(canvas => {
var imgUri = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
/** 写法一:简单,但不好设置下载图片默认名字*/
window.location.href = imgUri;
/** 写法二:利用 <a> 标签特性实现下载,可以设置默认图片名*/
// let aLink = document.createElement("a");
// aLink.style.display = "none";
// aLink.href = imgUri;
// aLink.download = "溯源码.png"; // 设置文件的默认保存名字
// document.body.appendChild(aLink);
// aLink.click();
// document.body.removeChild(aLink);
});
});
详细js写法:
// 第二种写法: 可以任意设置图片大小,随意定位截图位置,并得到清晰图片
$("#screenShot").click(() => {
const dom = $("#html2canvas")[0];
/** * 利用画布的可缩放特性实现高清截图 */
const Canvas = document.createElement('canvas'); // 创建一个新的canvas
const width = dom.offsetWidth; // 要截图区域的宽
const height = dom.offsetHeight; // 要截图区域的的高
const scale = window.devicePixelRatio; // 设备的像素比
// 设置画布
Canvas.width = width * scale;
Canvas.height = height * scale;
Canvas.getContext('2d').scale(scale, scale); // 缩放
// 画布从(0,0)移动到截取区域的左上角,只有这个这样,画布才能完美覆盖截图区域
Canvas.getContext('2d').translate(-dom.getBoundingClientRect().left, -dom.getBoundingClientRect().top);
html2canvas(dom, {
// 这里面都是转换的参数
canvas: Canvas,
useCORS: true, // 是否允许跨域
width: width + 'px', // 设置画布的宽高
hegiht: height + 'px',
}).then((canvas) => {
const context = canvas.getContext('2d');
// 关闭抗锯齿形,使得文字更有线条
context.mozImageSmoothingEnabled = false;
context.webkitImageSmoothingEnabled = false;
context.msImageSmoothingEnabled = false;
context.imageSmoothingEnabled = false;
var imgData = canvas.toDataURL("image/png");
let aLink = document.createElement("a");
aLink.style.display = "none";
aLink.href = imgData;
aLink.download = "溯源码.png";
document.body.appendChild(aLink);
aLink.click();
document.body.removeChild(aLink);
});
});