UNPKG

html-to-image

Version:

Generates an image from a DOM node using HTML5 canvas and SVG.

60 lines 2.52 kB
import { cloneNode } from './clone-node'; import { embedImages } from './embed-images'; import { applyStyle } from './apply-style'; import { embedWebFonts, getWebFontCSS } from './embed-webfonts'; import { getImageSize, getPixelRatio, createImage, canvasToBlob, nodeToDataURL, checkCanvasDimensions, } from './util'; export async function toSvg(node, options = {}) { const { width, height } = getImageSize(node, options); const clonedNode = (await cloneNode(node, options, true)); await embedWebFonts(clonedNode, options); await embedImages(clonedNode, options); applyStyle(clonedNode, options); const datauri = await nodeToDataURL(clonedNode, width, height); return datauri; } export async function toCanvas(node, options = {}) { const { width, height } = getImageSize(node, options); const svg = await toSvg(node, options); const img = await createImage(svg); const canvas = document.createElement('canvas'); const context = canvas.getContext('2d'); const ratio = options.pixelRatio || getPixelRatio(); const canvasWidth = options.canvasWidth || width; const canvasHeight = options.canvasHeight || height; canvas.width = canvasWidth * ratio; canvas.height = canvasHeight * ratio; if (!options.skipAutoScale) { checkCanvasDimensions(canvas); } canvas.style.width = `${canvasWidth}`; canvas.style.height = `${canvasHeight}`; if (options.backgroundColor) { context.fillStyle = options.backgroundColor; context.fillRect(0, 0, canvas.width, canvas.height); } context.drawImage(img, 0, 0, canvas.width, canvas.height); return canvas; } export async function toPixelData(node, options = {}) { const { width, height } = getImageSize(node, options); const canvas = await toCanvas(node, options); const ctx = canvas.getContext('2d'); return ctx.getImageData(0, 0, width, height).data; } export async function toPng(node, options = {}) { const canvas = await toCanvas(node, options); return canvas.toDataURL(); } export async function toJpeg(node, options = {}) { const canvas = await toCanvas(node, options); return canvas.toDataURL('image/jpeg', options.quality || 1); } export async function toBlob(node, options = {}) { const canvas = await toCanvas(node, options); const blob = await canvasToBlob(canvas); return blob; } export async function getFontEmbedCSS(node, options = {}) { return getWebFontCSS(node, options); } //# sourceMappingURL=index.js.map