运用html2canvas.js将div导出为图片,适用所有浏览器兼容性
程序员文章站
2022-06-22 15:54:02
首先引入html2canvas.js。公共方法/** * 导出div图片公共方法 * @param id div的id * @param name 导出名称 * @param scale 方大倍数 */function downLoadCanvasPicture(id,name,scale){ var imgUri = ""; var shareContent = document.getElementById(id); var width = shareContent.offs...
首先引入html2canvas.js。
公共方法
/**
* 导出div图片公共方法
* @param id div的id
* @param name 导出名称
* @param scale 方大倍数
*/
function downLoadCanvasPicture(id,name,scale){
var imgUri = "";
var shareContent = document.getElementById(id);
var width = shareContent.offsetWidth; //获取dom 宽度
var height = shareContent.offsetHeight; //获取dom 高度
var canvas = document.createElement("canvas"); //创建一个canvas节点
// var scale = 5; //定义任意放大倍数 支持小数
var offsetTop = shareContent.offsetTop;
canvas.width = width * scale; //定义canvas 宽度 * 缩放
canvas.height = (height + offsetTop) * scale; //定义canvas(高度 +偏移量 )*缩放
canvas.getContext("2d").scale(scale, scale);
var context = canvas.getContext('2d');
var rect = $("#"+id).get(0).getBoundingClientRect();//获取元素相对于视察的偏移量
context.translate(-rect.left, -rect.top);//设置context位置,值为相对于视窗的偏移量负值,让图片复位
html2canvas(shareContent, {
scale: scale, // 添加的scale 参数
canvas: canvas, //自定义 canvas
width: width, //dom 原始宽度
height: height,
onrendered: function (canvas) {
//生成base64图片数据
imgUri = canvas.toDataURL("image/png", 1.0);
var $a = document.createElement('a');
var type = 'png';
let mb = myBrowser();
//Firefox 默认末尾不带.png
if(mb == "FF"){
name +='.png';
}
$a.download = name;
$a.target = '_blank';
$a.href = imgUri;
// Chrome and Firefox
if (navigator.msSaveBlob) {
var blob_ = dataURLtoBlob(imgUri); // 用到Blob是因为图片文件过大时,在一部风浏览器上会下载失败,而Blob就不会
var url;
url = {
name: name, // 图片名称不需要加.png后缀名
src: blob_
};
window.navigator.msSaveBlob(url.src, url.name + '.png')
} else {
var evt = new MouseEvent('click', {
view: window,
bubbles: true,
cancelable: false
});
$a.dispatchEvent(evt);
}
}
});
}
/**
* 图片下载url转为blob
* @param dataurl
* @returns {Blob}
*/
function dataURLtoBlob(dataurl) {
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], {type: mime});
}
function myBrowser(){
var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
var isOpera = userAgent.indexOf("Opera") > -1;
if (isOpera) {
return "Opera"
}; //判断是否Opera浏览器
if (userAgent.indexOf("Firefox") > -1) {
return "FF";
} //判断是否Firefox浏览器
if (userAgent.indexOf("Chrome") > -1){
return "Chrome";
}
if (userAgent.indexOf("Safari") > -1) {
return "Safari";
} //判断是否Safari浏览器
if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera) {
return "IE";
}; //判断是否IE浏览器
}
本文地址:https://blog.csdn.net/qq_39019765/article/details/107352761
上一篇: springboot多配置环境
下一篇: Python jiaba库的使用详解