UNPKG

@metacell/geppetto-meta-ui

Version:

React components from geppetto-meta to create neuroscience applications and visualize data.

49 lines 1.84 kB
import * as htmlToImage from "html-to-image"; import { formatDate } from "./utils"; function getOptions(htmlElement, targetResolution, quality, pixelRatio, filter) { var resolution = getResolutionFixedRatio(htmlElement, targetResolution); var options = { quality: quality, canvasWidth: resolution.width, canvasHeight: resolution.height, pixelRatio: pixelRatio, filter: filter }; return options; } export function downloadScreenshot(htmlElement) { var quality = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.95; var targetResolution = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { width: 3840, height: 2160 }; var pixelRatio = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1; var filter = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function () { return true; }; var filename = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "Canvas_".concat(formatDate(new Date()), ".png"); var options = getOptions(htmlElement, targetResolution, quality, pixelRatio, filter); htmlToImage.toPng(htmlElement, options).then(function (dataUrl) { var link = window.document.createElement('a'); link.download = filename; link.href = dataUrl; link.click(); }); } function getResolutionFixedRatio(htmlElement, target) { var current = { height: htmlElement.clientHeight, width: htmlElement.clientWidth }; // if height is closer if (Math.abs(target.width - current.width) * 9 / 16 > Math.abs(target.height - current.height)) { return { height: target.height, width: Math.round(current.width * target.height / current.height) }; } return { height: Math.round(current.height * target.width / current.width), width: target.width }; }