欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

运用html2canvas.js将div导出为图片,适用所有浏览器兼容性

程序员文章站 2022-03-07 11:42:01
首先引入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

相关标签: js