推荐一款简单好用、功能强大的截图开发工具库,自从用了它,就彻底抛弃 html2canvas 了。
SnapDOM 介绍
SnapDOM 是一款
高性能网页截图
的 JavaScript 工具库,解决了传统截图工具(如html2canvas)的性能瓶颈和渲染精度问题。SnapDOM 仅支持现代浏览器,主打“精准捕获、极速渲染”
,支持将任意DOM元素(包括动态内容、CSS3特效、跨域资源)转换为高质量图片(PNG/JPEG/WebP)。
技术特性
-
渲染速度超快
:亲测全屏截图耗时仅0.8秒(比 html2canvas 快8倍); -
像素级还原
:可以精准渲染复杂样式(渐变、阴影、SVG)和动态加载内容(比如懒加载图片、异步数据等); -
零依赖
:轻量化(约8KB),纯原生 JavaScript 实现。
和 html2canvas 对比
对比项 | SnapDOM | html2canvas |
---|---|---|
截图速度 | ✅ 超快 | ❌ 慢 |
高分辨率支持 | ✅ 高清无模糊,甚至支持矢量 | ❌ 缩放易失真 |
滚动截图 | ✅ 自动拼接长图 | ❌ 需手动截取 |
GPU加速 | ✅ 异步渲染 | ❌ 阻塞主线程 |
CSS 支持 | ✅ 绝大部分都支持 | ❌ 大部分不支持 |
跨域资源 | ✅ 完美支持 | ⚠️ 部分会失效 |
开发上手使用体验
网页截图需求
我之前经常遇到在网页应用实现生成分享海报的需求,之前一直是使用 html2canvas 来解决,
html2canvas
相比于更传统的在后端来合成图片的方式已经灵活好用很多,但性能还是不佳,而且对 CSS 的很多样式不支持,表现为截图生成的结果和网页上不一致
,经常需要换写法或者用图片来代替,不太方便。
高性能、精准捕获
SnapDOM 通过
异步分层渲染
,将 DOM 拆解为独立图层,通过 GPU 并行处理,避免主线程阻塞。样式方面通过动态解析,能够确保伪类(比如:hover
)、Flex / Grid 布局等复杂样式也能被精确捕获。 简单易用
SnapDOM 虽然功能强大、性能优异,但用法很简单,API 很简单。
安装
npm i @zumer/snapdom
简单截图实现
import { snapdom } from '@zumer/snapdom'; const el = document.querySelector('#content'); // 以2倍图大小截图 const res = await snapdom(el, { scale: 2 }); // 将截图显示在网页 const img = await res.toPng(); document.body.appendChild(img); // 下载图片为指定格式 await res.download({ format: 'jpg', filename: '截图.jpg' });
注意事项
总的来说,SnapDOM 各方面都很强,是新一代的网页截图库,完全可以在生产上使用,不过需要注意一下几点:
-
图片跨域
:截图的区域内有外部图片,需要得确保这些资源支持CORS
,否则会截图失败; -
iframe 限制
:受浏览器的安全限制,SnapDOM 不能截iframe
里的内容; -
长页面截图
:截超长页面时,建议分块去截,否则可能会导致内存溢出。
免费开源说明
SnapDOM 是一款免费开源的 JS 开发工具库,项目源码采用 MIT 开源协议托管在 Github 上,我们可以自由地下载来使用,用在商业项目上也完全没问题。
这一切,似未曾拥有