modern-screenshot

qq15725MIT更新放缓

用 HTML5 canvas 和 SVG 把任意 DOM 节点快速导出成图片,适合前端做网页截图、生成分享图或海报。

📸 Quickly generate image from DOM node using HTML5 canvas and SVG.

v4.7.0发布于 2026-04-16 07:25 UTC2,090star95fork同步于 2026-11-07 07:33 UTC

怎么上手

由 README 提炼,执行前请确认
npm i modern-screenshot
硬件要求按 README 说明

README 未说明,属于浏览器端库,无需 GPU 或显存

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

用 HTML5 canvas 和 SVG 把 DOM 节点快速转成图片的浏览器端截图库

用 HTML5 canvas 和 SVG 把任意 DOM 节点快速导出成图片,适合前端做网页截图、生成分享图或海报。

核心能力

  • 基于 canvas 与 SVG 将 DOM 节点渲染为图片
  • 提供 domToPng、domToSvg、domToJpeg、domToWebp 等多种导出格式
  • 支持导出 dataURL、Blob、Pixel、Canvas 与 HTMLElement
  • 通过 createContext 复用上下文和 Web Worker 实现高频截图
  • 支持 CDN 引入,可直接在浏览器控制台调用

容易踩的坑

从 html-to-image 分叉而来,部分嵌入资源可能因 CORS 失败;Web Worker 用法需配合 Vite 的 ?url 导入 workerUrl;暂不支持克隆 CSS counters(content: counter())

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v4.7.0
  1. v4.7.0最新正式版2026-04-16 · 2026-04-16 07:25 UTC

    Please refer to CHANGELOG.md for details.

  2. v4.6.82026-01-26 · 2026-01-26 01:42 UTC
    查看更新说明

    Please refer to CHANGELOG.md for details.

  3. v4.6.72025-11-18 · 2025-11-18 10:04 UTC
    查看更新说明

    Please refer to CHANGELOG.md for details.

  4. v4.6.62025-08-19 · 2025-08-19 15:54 UTC
    查看更新说明

    Please refer to CHANGELOG.md for details.

  5. v4.6.52025-07-05 · 2025-07-05 01:32 UTC
    查看更新说明

    Please refer to CHANGELOG.md for details.

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    📦 Install

    npm i modern-screenshot
    

    🦄 Usage

    import { domToPng } from 'modern-screenshot'
    
    domToPng(document.querySelector('#app')).then((dataUrl) => {
      const link = document.createElement('a')
      link.download = 'screenshot.png'
      link.href = dataUrl
      link.click()
    })
    
    <script src="https://unpkg.com/modern-screenshot"></script>
    <script>
      modernScreenshot.domToPng(document.querySelector('body')).then(dataUrl => {
        const link = document.createElement('a')
        link.download = 'screenshot.png'
        link.href = dataUrl
        link.click()
      })
    </script>
    

    ⚠️ Partial embedding will fail due to CORS

    const script = document.createElement('script')
    script.src = 'https://unpkg.com/modern-screenshot/dist/index.js'
    document.getElementsByTagName('head')[0].appendChild(script)
    
    script.onload = () => {
      modernScreenshot
        .domToImage(document.querySelector('body'), {
          debug: true,
          progress: (current, total) => {
            console.log(`${current}/${total}`)
          }
        })
        .then((img) => {
          const width = 600
          const height = img.height * (width / img.width)
          console.log('%c ', [
            `padding: 0 ${width / 2}px;`,
            `line-height: ${height}px;`,
            `background-image: url('${img.src}');`,
            `background-size: 100% 100%;`,
          ].join(''))
        })
    }
    

    Methods

    method(node: Node, options?: Options)

    DOM to dataURL

    DOM to data

    DOM to HTMLElement

    Options

    See the options.ts

    Singleton context and web worker

    Quick screenshots per second by reusing context and web worker

    import { createContext, destroyContext, domToPng } from 'modern-screenshot'
    // use vite
    import workerUrl from 'modern-screenshot/worker?url'
    
    async function screenshotsPerSecond() {
      const context = await createContext(document.querySelector('#app'), {
        workerUrl,
        workerNumber: 1,
      })
      for (let i = 0; i < 10; i++) {
        domToPng(context).then((dataUrl) => {
          const link = document.createElement('a')
          link.download = `screenshot-${i + 1}.png`
          link.href = dataUrl
          link.click()
          if (i + 1 === 10) {
            destroyContext(context)
          }
        })
        await new Promise(resolve => setTimeout(resolve, 1000))
      }
    }
    
    screenshotsPerSecond()
    

    See the context.ts

    TODO