@metacell/geppetto-meta-ui
Version:
React components from geppetto-meta to create neuroscience applications and visualize data.
49 lines • 1.84 kB
JavaScript
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
};
}