微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

js实现截图保存图片功能的代码示例

前几天公司项目里有这样一个需求,把网页的某一部分能够一键截图。这个功能其实就是对人力的一个优化,如果是人为做的话,相信大家都知道怎么做(用截图工具在指定区域截图,然后保存到本地,再上传的服务器上去)。我这个主要就解决这个批量的人力的优化。好,废话不多说了。直接上逻辑和代码。'

这个问题的解决方案:html to canvas to png. 目前有一个这样的插件: html2canvas,

rush:js;"> html2canvas($targetElem,{ useCORS: true,onrendered: function(canvas) { } });

这个'$targetElem'就是那个要转换的html, useCORS 用来设置图片是否跨域(如html图片域名和当前网站不是同一个域名,需要设置这个属性), onrendered 是转换完成后执行方法

里面有一种情况需要考虑:如果html标签里有svg标签, 目前htm2canvas不支持svg标签

这个情况下就需要先把svg处理成html2canvas能处理标签

我这策略是 svg 转换成 canvas ,html2canvas 转换完成,再回复svg。这里我还需要这个插件canvg(svg转canvas)

具体代码如下

rush:js;"> var nodesToRecover = []; var nodesToRemove = []; var $svgElem = $targetElem.find('svg'); $svgElem.each(function(index,node) { var parentNode = node.parentNode; var canvas = document.createElement('canvas');

canvg(canvas,parentNode,{ignoreMouse: true,ignoreAnimation: true});

//将svg转换成canvas
nodesToRecover.push({
parent: parentNode,child: node
});
parentNode.removeChild(node);

nodesToRemove.push({
parent: parentNode,child: canvas
});

parentNode.appendChild(canvas);

});
html2canvas($targetElem,{
useCORS: true,onrendered: function(canvas) {
var base64Image = canvas.toDataURL('image/png').substring(22);

  //<a href="https://www.jb51.cc/tag/huifu/" target="_blank" class="keywords">回复</a>svg
  nodesToRemove.forEach(function(pair) {
      pair.parent.removeChild(pair.child);
  });

  nodesToRecover.forEach(function(pair) {
      pair.parent.appendChild(pair.child);
  });

})

这个方案,我已经完全实现了,并在我们项目里使用了。欢迎大家使用,如果有什么问题,可以留言给我。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

原文地址:https://www.jb51.cc/js/41613.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐