前端截长图这件破事

前端截图相对移动端来说复杂,主要方法包括canvas、svg和无头浏览器。html2canvas将DOM转为canvas,但处理复杂结构时表现不佳;svg的<foreignObject>能将HTML嵌入,但兼容性有限。puppeteer作为无头浏览器,能截图、爬虫和自动化测试,但在Linux部署上存在挑战。前端开发者在面对截图问题时,常感到困难重重。
摘要由CSDN通过智能技术生成

昨天的文章:element-ui 按需引入包体是全部引入的3+倍

为啥说前端截图是件破事呢?因为它相比与移动端来说,太难了,移动端一个 API 搞定!

前端截图主要有两个思路:

思路一:canvas、svg

利用原生 api 直接导出图片,有 canvas、svg,也就是说如果你想导出图片,前提是页面是通过 canvas 或者是 svg 实现的,或者能够转换成这两种。

先说 canvas

canvas 相当于给你提供了一个画布,然后需要你把想要显示的内容画到这个画布上。这种方式对于简单的页面还好,如果对于复杂页面来说,实现成本就太高了。

但是现实中,我们的前端页面使用的都是 HTML,那么如何把 HTML 转换成 canvas?最为典型的开源库是 html2canvas,它的原理就是把 DOM 转换成 canvas。但它处理复杂的 DOM 结构无法正常工作。

canvas 可支持转换成 data:url 和 Blob 对象:

var canvas = document.getElementById('canvas');

canvas.toBlob(function(blob) {
  var newImg = document.createElement('img'),
      url = URL.createObjectURL(blob);

  newImg.onload = function() {
    // no longer need to read the blob so it's revoked
    URL.revokeObjectURL(url);
  };

  newImg.src = url;
  document.body.appendChild(newImg);
});
var canvas = document.getElementById('canvas');
var dataURL = canvas.toDataURL();
console.log(dataURL);
// "data:image/png;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值