在Firefox中导出高图表时出现黑色图像错误
Black image bug when exporting highcharts in Firefox
我使用highcharts在网页上显示几个显示良好的图形。
我有一个导出功能,试图将图表组合成pdf。我正在获取图表的svg,并将其转换为jpeg图像,以包含在jsPDF创建的pdf中。
这是我用来生成图像的代码:
if ($('.chart').length > 0) {
var chartSVG = $('.chart').highcharts().getSVG(),
chartImg = new Image();
chartImg.src = "data:image/svg+xml;base64," + window.btoa(unescape(encodeURIComponent(chartSVG)));
var chartCanvas = document.createElement("canvas");
chartCanvas.width = 600;
chartCanvas.height = 400;
chartCanvas.getContext("2d").drawImage(chartImg, 0, 0, 600, 400);
var chartImgData = chartCanvas.toDataURL("image/jpeg");
}
这在Chrome中非常有效,但在Firefox中它只返回一个黑色图像。
有人知道可能出了什么问题,或者见过类似的问题吗?
谢谢你的帮助。
更新
我已经更新了代码,但现在无论是在Chrome还是Firefox中,pdf文档都没有附加任何图像。
if ($('.sales').length > 0) {
var chartSVG = $('.sales').highcharts().getSVG(),
chartImg = new Image();
chartImg.onload = function () {
var chartCanvas = document.createElement("canvas");
chartCanvas.width = 600;
chartCanvas.height = 400;
chartCanvas.getContext("2d").drawImage(chartImg, 0, 0, 600, 400);
var chartImgData = chartCanvas.toDataURL("image/jpeg");
}
chartImg.src = "data:image/svg+xml;base64," + window.btoa(unescape(encodeURIComponent(chartSVG)));
}
不确定代码是否在正确的位置。
如果我将"chartImgData"记录到控制台,两个浏览器都会生成一个dataURI,但Firefox的版本与Chromes不同。
更新
修复了黑色图像的问题。现在我正在努力解决如何返回多个图像——如何嵌套多个回调,或者有其他方法吗?示例:jsfiddle.net/wmuk489c/2
已解决
谢谢你的帮助@RobertLangson。fiddle更新了最终的工作代码,如果有人需要:http://jsfiddle.net/wmuk489c/3/
其他问题:
我的图表是动态的,所以可能并不总是存在。我需要从每个存在的图中获取一个图像。如果图形不存在,则"getSVG"函数将失败,请参见示例:http://jsfiddle.net/wmuk489c/4/
如果图表不存在,img.onload应该如何工作?回调中的第一个图表可能也不存在,那么这是如何工作的呢?有没有更好的方法来获取图像?
设置chartImg.src会导致异步加载,因此需要执行此操作。。。
chartImg.onload = function() {
var chartCanvas = document.createElement("canvas");
chartCanvas.width = 600;
chartCanvas.height = 400;
chartCanvas.getContext("2d").drawImage(chartImg, 0, 0, 600, 400);
var chartImgData = chartCanvas.toDataURL("image/jpeg");
doc.addImage(chartImgData, 'JPEG', 0, 0, 200, 100);
// You can only do this bit after you've added the image so it needs
// to be in the callback too
doc.save('test.pdf');
}
chartImg.src = ...
否则你就有种族问题,我想你只是碰巧用电脑上的Chrome浏览器逃脱了惩罚。
这是你修好的小提琴。
- 如何使用url加载程序在webpack中导入多个图像
- nodejs-expressjs上传图像并显示它们
- 使用JSP从服务器检索和显示图像
- 角度:在ng重复上切换图像
- 画廊图像未显示
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- Javascript排序的图像弹出窗口..可以't单独弹出
- 在Firefox中导出高图表时出现黑色图像错误
- 将画布对象另存为图像-黑色背景
- 嵌入视频,将黑色背景更改为自定义图像或第一个视频场景
- 匹配模板后的 opencv 黑色图像
- 如何在两个连续的图像之间插入黑色空格
- 将鼠标悬停在图像上时获得带有文本的黑色叠加层
- 跨源 - 带有来自自己域的图像的黑色纹理
- 摇摆图像之间的黑色空间
- Fabric.js混合模式-混合图像为黑色
- 通过canvas将画布保存为图像.toDataURL结果为黑色矩形
- 使用PHP从画布中保存图像,没有黑色背景
- 了解画布如何将图像转换为黑色和白色
- 淡入淡出图像之间没有黑色传输-JQuery