javascript - 使用更高分辨率的javascript将画布图表下载为PNG图像
问题描述
我们需要将画布图表下载为具有更高分辨率的 png 图像。尝试以下代码片段通过设置宽度和高度来调整图像大小。但下面的解决方案是在下载中给出空图像。下面的代码失败了。
如何在下载的 png 图像中调整画布图表的大小。
resizeImage(img, w, h) {
var result = new Image();
var canvas = document.createElement('canvas');
canvas.width = w;
canvas.height = h;
canvas.getContext('2d').drawImage(img, 0, 0, w, h);
result.src = canvas.toDataURL();
return result;
}
downloadChart(event: any, chartName: string) {
var img = new Image();
img.src = (document.getElementsByClassName('chartclassname')[0] as HTMLCanvasElement).toDataURL(); // chartclassname for canvas chart classname
var link = document.createElement('a');
var img2 = this.resizeImage(img, 500, 500);
const anchor = document.getElementById('dynamicDownloadLink') as HTMLAnchorElement;
anchor.href = img2.src;
anchor.download = `${this.getChartNameForDownload(chartName)}.png`;
anchor.click();
}
解决方案
因为您正在动态创建一个新Image
的,所以您必须等到它被加载后才能与drawImage
.
这应该有效:
downloadChart(event: any, chartName: string) {
var img = new Image();
img.src = (document.getElementsByClassName('chartclassname')[0] as HTMLCanvasElement).toDataURL(); // chartclassname for canvas chart classname
img.onload = () => {
var link = document.createElement('a');
var img2 = this.resizeImage(img, 500, 500);
const anchor = document.getElementById('dynamicDownloadLink') as HTMLAnchorElement;
anchor.href = img2.src;
anchor.download = `${this.getChartNameForDownload(chartName)}.png`;
anchor.click();
}
}
推荐阅读
- docker - 更新 docker 服务时出错
- android - 如何在 Retrofit for Android 中外部化基本 URL
- javascript - 为什么我的 mat-error 只有在我单击按钮两次时才会显示?
- javascript - 用户输入时如何添加千位分隔符?
- karate - 空手道:有没有办法将函数应用于示例:变量?
- javascript - 正文解析器导致未定义
- node.js - 使用 Blob、Buffer、BinaryString(后端 NodeJS)附加表单数据
- r - 是否可以在 R 中编写自定义前缀运算符?(为什么不?)
- python - DRF:方法 GET 根据参数返回对象
- cordova-plugins - 是否可以在目标为“_blank”的ios设备上加载cordova-plugin-inappbrowser插件中的页面?