在页面上将Highcharts画布渲染为PNG

Ben*_*son 22 png canvas render highcharts

我正在使用HighCharts库生成一些动态图表.但是,我想将HighCharts画布元素渲染为PNG图像,这样用户就可以将图表复制并粘贴到电子邮件等中,而无需使用导出功能.

具体来说,我正在尝试创建一个包含图表的HTML电子邮件模板,并希望用户能够选择所有>复制/粘贴到他们的电子邮件客户端而不是复制/粘贴,导出图像,然后找到一种方法将其插入电子邮件中.

我发现了这个:将HTML Canvas捕获为gif/jpg/png/pdf?,但代码似乎没有呈现文档的图像.

Mar*_*ark 27

如果您已经开始使用HighCharts,那么这是一个黑客攻击.它使用canvg将SVG解析为画布,然后将画布转换为PNG.

chart = new Highcharts.Chart({
    
    chart: {
        renderTo: 'container'
    },
    
    title: {
        text: ''
    },
    
    xAxis: {
        categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    },
    
    series: [{
        data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]        
    }],
    
    navigation: {
        buttonOptions: {
            align: 'center'
        }
    }
});

canvg(document.getElementById('canvas'), chart.getSVG())
    
var canvas = document.getElementById("canvas");
var img = canvas.toDataURL("image/png");

document.write('<img src="'+img+'"/>');
Run Code Online (Sandbox Code Playgroud)


jkr*_*ill 11

我知道这是一个古老的问题,但由于它在Google搜索结果中排名第一,我认为值得一提的是,Highcharts现在原生支持服务器端图像生成脚本,并且效果很好.


Hal*_*and 8

使用" 服务器上的渲染图表 "(来自jkraybills答案)中的信息,我使用Ajax创建了这个最小的示例,以获取尚未渲染的图表的图像,并将其显示在img-tag中.

HTML:

<img id="chart" style="width: 600px;" />
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

// Regular chart options
var options = {
    title: {
        text: 'My chart'
    }
    ...
}

//URL to Highcharts export server
var exportUrl = 'http://export.highcharts.com/';

//POST parameter for Highcharts export server
var object = {
    options: JSON.stringify(options),
    type: 'image/png',
    async: true
};

//Ajax request
$.ajax({
    type: 'post',
    url: exportUrl,
    data: object,
    success: function (data) {
        // Update "src" attribute with received image URL
        $('#chart').attr('src', exportUrl + data);
    }
});
Run Code Online (Sandbox Code Playgroud)

就像在这个JSFiddle演示中一样.

POST参数的其余部分(width,callback...)在文档中.


Phu*_* Do 6

这是基于PhantomJS的服务器端解决方案.您可以使用JSONP对image.vida.io进行跨域调用.

http://image.vida.io/

您的图表/可视化需要从外部访问.您可以将凭据传递给URL.

http://image.vida.io/api/https%3A%2F%2Fvida.io%2Fdocuments%2FWgBMc4zDWF7YpqXGR/viewport_width=980&viewport_height=900&delay=5000&selector=%23canvas

然后你可以用img标签显示图像:

<img src="data:image/png;base64, [base64 data]"/>
Run Code Online (Sandbox Code Playgroud)

它适用于浏览器.