ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

SnapDOM DOM 截图终极指南:4 行代码把网页元素拍成图

SnapDOM DOM 截图终极指南:4 行代码把网页元素拍成图 SnapDOM DOM 截图终极指南4 行代码把网页元素拍成图【免费下载链接】snapdomHigh-performance engine for capturing, modifying, and converting DOM elements into any format.项目地址: https://gitcode.com/GitHub_Trending/sn/snapdomSnapDOM 是一个浏览器 DOM 截图引擎把任意元素转成 SVG、PNG、JPG、WebP 或带图 HTML字体样式原样保留、零依赖、全程跑在页面里。4 行代码你就能拿到一张生产级元素截图。截图痛点有哪些能靠 SnapDOM 解决它专治页面就在用户浏览器里截图却绕道服务器这件事管理后台分享卡片想把图表卡片发给客户后端截图要部署无头浏览器太重。在线编辑器出图用户编辑完点分享图片页面在用户浏览器里捕获也理应发生在本地无需服务端。给 AI 喂页面状态把当前界面变成图片或结构化上下文必须现场捕获不能等请求来回。弱网现场作业捕获本身不额外发请求资源已经在页面上离线照样出图。能力地图捕获流水线里各模块干什么入口只有一个snapdom(element, options)返回的是一个捕获态快照之后任意格式导出都不再重渲染页面src/api/snapdom.js对外 API 与选项校验流水线的第一站。src/core/capture.js主流程编排克隆、样式收集、光栅化与差异复用都收口在这里。src/modules/fonts.js识别页面实际使用的 web 字体并内嵌防止截图字体漂移。src/exporters/toPng、toJpg、toWebp、toSvg、toCanvas、toBlob、download等导出方法都在这。packages/plugins/PDF、GIF、视频、打码、时间戳等官方插件按需安装。BENCHMARKS.md真实场景的实测耗时选方案时先看它。快速上手4 行代码拍一张元素截图先npm i zumer/snapdom无依赖然后import { snapdom } from zumer/snapdom const result await snapdom(document.querySelector(#card)) const png await result.toPng() document.body.appendChild(png)三个最常碰的参数scale/dpr控制输出分辨率默认跟随设备像素比。width/height钉死输出尺寸只设一个时自动保持宽高比。exclude按选择器剔除节点配excludeMode: remove才连布局一起删。三种捕获方式怎么选一步快捷、结果复用、预热结论单张偶发出图用一步快捷同一状态要多种产物用结果复用固定按钮出图用预热。按下表对号入座方式适用场景优点局限推荐指数一步快捷snapdom.toPng(el, opts)偶发单图代码最少无中间变量想换格式再导要重新捕获★★★结果复用snapdom(el)后导出同一状态出多种格式捕获一次导出无限次且不受页面后续变化影响需要自己持有 result 对象★★★★★snapdom.preCapture()预热固定的导出按钮首次点击学会目标之后 hover 提前备好点下去零等待只对该按钮生效★★★真实项目里最常用的是结果复用捕获一次后自由组合产物const result await snapdom(card, { scale: 2 }) const png await result.toPng() const blob await result.toBlob({ format: webp, quality: 0.75 }) await result.download({ format: png, filename: card })调优 3 个点尺寸、剔除、缓存出高清图最常调的是width与dpr的组合width定 CSS 宽度dpr再乘实际像素打印级直接给到 2 起步。const result await snapdom(card, { width: 480, dpr: 2, backgroundColor: #ffffff }) const blob await result.toBlob({ format: png })清页面想让工具栏、广告条不出现在截图里用exclude列选择器。模式二选一remove让节点彻底消失、周围内容补位默认hide保留不可见占位布局不塌const result await snapdom(card, { exclude: [.toolbar, .no-print], excludeMode: remove })缓存不用你操心v3 对未变化的捕获自动复用重复截图是毫秒级的BENCHMARKS.md 里复杂卡片实测 10 ms。只有一处要盯紧sheet.insertRule()这类引擎看不见的 CSSOM 改动必须显式传invalidate: true否则拿旧图把exclude写成函数则会关闭记忆化轮询页每帧都全量捕获。它实际能干哪些活仪表盘 PDF 与像素级回归下面两个案例都发生在浏览器里没有后端参与。第一个是文档导出装上插件包后把官方pdf-image插件挂进plugins数组捕获先渲染成图再排版进 PDF 页。Kong UI Components 就这么做仪表盘在浏览器端直接出 PDF 给客户下载。图基方案的好处是 PDF 里不依赖字体和字体网络所见即所得。第二个是像素级回归这个项目自己的测试套件就是给 DOM 截图、和基线图逐像素对比方法可对照 BENCHMARKS.md官方出品的视觉回归工具 SnapDIFF 同样基于这条捕获管线。大页面建议先调低scale出一版小图再比对把 CI 时长压住。避坑清单上线前对一遍的 6 个误区坑大多不来自 API 本身而来自预期和引擎行为对不上width和scale都传、指望相乘 → v3 里 width 优先scale 被忽略出图分辨率低于预期。用sheet.insertRule()改完 CSSOM 直接截 → 引擎感知不到变化产出旧图记得invalidate: true。为拿实时逻辑把exclude写成函数 → 该次捕获关闭记忆化与增量重建轮询页每帧全量捕获。以为 SVG 产物哪都能开 → 它用foreignObject内嵌 HTML部分办公与文档工具里会空白。假设跨域图片自动可用 → 无 CORS 的资源会缺图需要可读资源或代理。把不可信 HTML 直接喂给fromString()→img onerror这类内联事件会在你的源里执行先过一遍 DOMPurify 之类的清洗。到这里从单元素出图到多格式产物管线都齐了。现在就去把页面上那张卡片的toBlob({ format: webp })跑一遍一分钟见效果 【免费下载链接】snapdomHigh-performance engine for capturing, modifying, and converting DOM elements into any format.项目地址: https://gitcode.com/GitHub_Trending/sn/snapdom创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表