移动端H5页面截图【含 domtoimage、html2canvas 】

起因:

由于云栖大会项目需要支持 名片保存到本地功能【如下图红框】,所以,需要单独截取页面中的名片信息,并且保存到本地。

推荐给:需要获取页面内容,给页面截图的小伙伴

 

 

 

 

介绍两个工具:

html2canvas

官方地址:https://github.com/niklasvh/html2canvas

 

优点:

1.使用人数多,资料更全

 

缺点:

1.感觉不怎么维护更新了

 

 


domtoimage

官方地址【github例子很全了】:https://github.com/tsayen/dom-to-image

 

优点:

1.有人维护

2.git活跃,作者发言

3.使用方便

 

缺点:

1.新控件,使用人数少,资料不全

2.IOS手机不能截图,污染了canvas.toDataURL会报错【目前还没解决】(参考链接:https://github.com/tsayen/dom-to-image/issues/40

   报错信息如下:"SECURITY_ERR: DOM Exception 18: The operation is insecure"

   修改dom-to-image.js源码如下:

[javascript] view plain copy

  1. //IOS兼容   
  2. function toPng(node, options) {  
  3.     return draw(node, options || {})  
  4.         .then(function(result) {  
  5.             try {  
  6.                 // 原来的  
  7.                 var image = result.canvas.toDataURL("image/png", 1.0);  
  8.                 return image;  
  9.   
  10.                 // 改为svg更清楚  
  11.                 // console.log(result.svg.src);  
  12.                 // return result.svg.src;  
  13.             } catch (err) {  
  14.                 console.warn(err);  
  15.                 // alert(result.svg.src);  
  16.                 // console.log(result.svg.src);  
  17.                 return "error";  
  18.             }  
  19.         });  
  20. }  

 

 


最终方案选择:

参考了很多资料,最后决定IOS使用html2canvas ,Android使用domtoimage

 

代码:

[javascript] view plain copy

  1. // 裁剪名片  
  2. cropCard() {      
  3.   let self = this;  
  4.   // 获取dom结构  
  5.   let card_target = this.refs.copyCardArea;   
  6.   domtoimage.toPng(card_target).then(function(dataUrl) {  
  7.     //andriod   
  8.     if (dataUrl != "error") {  
  9.       // alert("domtoimage");  
  10.       self.setState({  
  11.         imgUrl: dataUrl,  
  12.         isDownloadImg: true,  
  13.       })  
  14.     }  
  15.     // ios  
  16.     else {  
  17.       let b64;  
  18.       html2canvas(card_target, {  
  19.         useCORS: true  
  20.       }).then(function(canvas) {  
  21.         try {  
  22.           b64 = canvas.toDataURL("image/png");  
  23.         } catch (err) {  
  24.           console.log(err)  
  25.             // alert(err)  
  26.         }  
  27.         self.setState({  
  28.           imgUrl: b64,  
  29.           isDownloadImg: true,  
  30.         })  
  31.       }).catch(function onRejected(error) {});  
  32.     }  
  33.   });  
  34. }  

 

 

手机淘宝兼容:

手淘禁止了,用户使用截图,推荐使用官方JSBridge

WindVane链接:http://h5.alibaba-inc.com/api/WindVane-API.html

方法:WVScreen.capture

缺点:

1.只能截取整个屏幕,不能只获取名片信息

2.不知道是不是react的原因,直接使用,会有部分情况截取到灰色蒙版的效果,所以延迟300毫秒截图

 

引入:

[javascript] view plain copy

  1. <script src="//g.alicdn.com/mtb/lib-windvane/2.1.8/windvane.js"></script>  

 

代码:

[javascript] view plain copy

  1. window.setTimeout(() => {  
  2.   this.taobaoCapture();  
  3. }, 300);  

[javascript] view plain copy

  1. taobaoCapture() {  
  2.   let self = this;  
  3.   var params = {  
  4.     // 是否将截屏结果保存一份到相册中  
  5.     inAlbum: 'true'  
  6.   };  
  7.   window.WindVane.call('WVScreen''capture', params, function(e) {  
  8.     // alert('success: ' + JSON.stringify(e));  
  9.     // 截图成功提示话语  
  10.     self.setState({  
  11.       isTips: true,  
  12.       line1: tipWords.saveCardS.line1,  
  13.       line2: tipWords.saveCardS.line2,  
  14.     });  
  15.   }, function(e) {  
  16.     // alert('failure: ' + JSON.stringify(e));  
  17.     // 截图失败提示话语  
  18.     self.setState({  
  19.       isTips: true,  
  20.       line1: tipWords.saveCardF.line1,  
  21.       line2: tipWords.saveCardF.line2,  
  22.     });  
  23.   });  
  24. }  


 


 

写在最后:

domtoimage 和 html2canvas截图PNG格式,都会损失部分图片精度,使图片变模糊。
如果不是在移动端的话,建议使用SVG格式,更为清晰
两个插件个人更喜欢 domtoimage ~

 

 

 

DEMO:

https://codepen.io/CandyQiu/pen/XzmGNL?editors=0010

 

转载:http://blog.csdn.net/candy_home/article/details/78424642

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: UniApp是一种基于Vue.js的跨平台开发框架,可以用于开发微信小程序、H5、安卓和iOS应用。H5是一种基于HTML、CSS和JavaScript的网页开发技术,可以在支持HTML5的浏览器中运行。 Html2canvas是一个JavaScript库,可以将HTML元素转换为Canvas图像。通过使用html2canvas,可以将H5页面中的HTML元素截图,并将其转换为Canvas图像,从而实现一些有趣的效果和功能。 在UniApp中使用html2canvas可以实现一些独特的功能。例如,可以将H5页面上的特定元素转换为Canvas图像,并将其保存为图片或在页面上展示。这对于一些需要在应用中操作和处理截图的功能非常有用。 使用html2canvas还可以实现H5页面的模板分享功能。通过将H5页面转换为Canvas图像,可以将页面保存为图片,并通过分享功能分享给其他用户,实现页面内容的传播和分享。 总之,UniApp和html2canvas的结合可以为开发者提供更多有趣和实用的功能。无论是实现特定元素的截图,还是实现页面内容的分享,都可以通过使用这两种技术来实现。这对于开发具有创新和交互性的H5应用来说是非常有帮助的。 ### 回答2: Uniapp是一种跨平台的开发框架,可以用于开发移动端和Web应用。而HTML2Canvas是一个将HTML元素转换为Canvas图像的JavaScript库。 在Uniapp中,我们可以使用HTML2Canvas库来实现H5页面元素的截图功能。首先,我们需要在Uniapp项目中引入HTML2Canvas库的代码。可以通过npm安装HTML2Canvas库,然后在需要使用的页面中导入该库。 接下来,在需要截图页面中,我们可以通过选择器或者获取元素的DOM对象将需要截图的元素传入HTML2Canvas的API函数中。HTML2Canvas会将传入的元素转换为Canvas图像。 然后,我们可以获取到转换后的Canvas对象,通过Canvas提供的toDataURL方法将其转换为DataURL格式的图片数据。我们可以将DataURL格式的图片数据传递给后进行保存、上传或者展示。 需要注意的是,由于Uniapp是跨平台开发框架,HTML2Canvas库在不同平台上的兼容性可能存在差异。在使用HTML2Canvas时,需要测试兼容性并进行适当的调整。 总结起来,Uniapp和HTML2Canvas的结合可以实现在H5页面中将HTML元素转换为Canvas图像的功能,可以实现元素截图、保存等操作。 ### 回答3: uniapp是一个跨平台的开发框架,它基于Vue.js,可以用于开发多个平台上的应用程序,包括H5、小程序、App等。而html2canvas是一个JavaScript库,可以将网页中的内容转换为图片。 在uniapp中使用html2canvas可以实现将H5页面的内容生成图片的功能。首先需要将html2canvas库引入到uniapp的项目中。然后需要在需要生成图片的页面中调用html2canvas的相关方法,将页面内容转换为图片。生成图片后,可以通过uniapp的API将图片保存到本地或者上传到服务器。 使用html2canvas生成图片可以应用于一些场景,比如制作截图功能、生成分享图等。比如,我们可以在uniapp的H5页面中添加一个“生成图片”按钮,当用户点击按钮时,调用html2canvas页面内容转换为图片,并将图片保存到本地或者分享出去。 值得注意的是,由于html2canvas是通过解析网页中的DOM结构来生成图片的,所以在使用过程中需要注意一些限制和兼容性问题,比如图片中可能不包视频、动画等一些特殊的元素,以及一些浏览器的兼容性问题。 总之,使用uniapp结合html2canvas可以实现在H5页面中将网页内容转换为图片的功能,为开发者提供了更多的可能性和灵活性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值