@egoist/dom-screenshot
TypeScript icon, indicating that this package has built-in type declarations

1.0.3 • Public • Published

dom-screenshot

Minzip Version Downloads Issues License

Quickly generate image from DOM node using HTML5 canvas and SVG

Fork from html-to-image

📦 Install

npm i @egoist/dom-screenshot

🦄 Usage

import { domToPng } from '@egoist/dom-screenshot'

domToPng(document.querySelector('#app')).then((dataUrl) => {
  const link = document.createElement('a')
  link.download = 'screenshot.png'
  link.href = dataUrl
  link.click()
})
CDN
<script src="https://unpkg.com/@egoist/dom-screenshot"></script>
<script>
  domScreenshot.domToPng(document.querySelector('body')).then((dataUrl) => {
    const link = document.createElement('a')
    link.download = 'screenshot.png'
    link.href = dataUrl
    link.click()
  })
</script>


Browser Console

⚠️ Partial embedding will fail due to CORS

const script = document.createElement('script')
script.src = 'https://unpkg.com/@egoist/dom-screenshot'
document.getElementsByTagName('head')[0].appendChild(script)

script.onload = () => {
  domScreenshot
    .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

// use vite
import workerUrl from '@egoist/dom-screenshot/worker?url'
import { createContext, destroyContext, domToPng } from '@egoist/dom-screenshot'

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

Package Sidebar

Install

npm i @egoist/dom-screenshot

Weekly Downloads

1

Version

1.0.3

License

MIT

Unpacked Size

206 kB

Total Files

47

Last publish

Collaborators

  • egoist