js把某个div或其他元素用图片的形式导出或下载

很多时候需要用到把页面上的某个块元素用图片的形式导出来,例如导出一些表格构成的单据
思路:把指定的html内容转换成canvas,然后再转换成图片
这里推荐使用这两个库


<script src="https://superal.github.io/canvas2image/canvas2image.js"></script>
<script src="https://html2canvas.hertzen.com/dist/html2canvas.js"></script>

<script>
//使用例子
var html2Img = {
  init: function() {
    this.initDom();
    this.initEvent();
  },
  initDom: function() {
    this.$el = {};
    this.$el.$startBtn = $('#clickBtn');//触发元素
    this.$el.$htmlSource = $('#youhtml');//要导出的html
    this.$el.$pngContent = $('#imgshow');//转换后的图片展示
  },
  initEvent: function() {
    var me = this;
    this.$el.$startBtn.on('click', function() {
      me.initSavePng(2);
    });
  },
  initSavePng: function(N) {
    var me = this;
    var sourceContent = me.$el.$htmlSource;
    var width = sourceContent.width();
    var height = sourceContent.height();
    var offsetTop = sourceContent.offset().top;
    var offsetLeft = sourceContent.offset().left;
    var canvas = document.createElement("canvas");
    var canvas2D = canvas.getContext("2d");
    // 不能小于1,否则图片不完整
    var scale = N;
    canvas.width = (width + offsetLeft) * scale;
    canvas.height = (height + offsetTop) * scale;
    canvas2D.scale(scale, scale);
    canvas2D.font = "Microsoft YaHei";
    var options = {
      //检测每张图片都已经加载完成
      tainttest: true,
      canvas: canvas,
      scale: scale,
      //dom 放大的宽度,放大倍数和清晰度在一定范围内成正相关
      width: width + offsetLeft,
      // 开启日志,可以方便调试
      logging: true,
      //dom 放大的宽度,放大倍数和清晰度在一定范围内成正相关
      height: height + offsetTop
    };
    html2canvas(sourceContent, options).then(function(canvas) {
      //显示图片-start
      var img = window.Canvas2Image.convertToPNG(canvas, width * scale, height * scale);
      me.$el.$pngContent.append(img);
      // 将图片恢复到原始大小
      me.$el.$pngContent.find('img').css({
        width: width,
        height: height
      });
      //显示图片-end
      //导出图片
      window.Canvas2Image.saveAsPNG(canvas, width * scale, height * scale);
    });
  }
};
html2Img.init();
</script>

转载于:https://www.cnblogs.com/chriiess/p/8952028.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值