Render Highcharts canvas как PNG на странице
Я использую библиотеку HighCharts для создания некоторых динамических диаграмм. Тем не менее, я хотел бы сделать элемент холста HighCharts в виде PNG-изображения, чтобы пользователь мог скопировать и вставить диаграмму в электронную почту и т.д., Не используя функцию экспорта.
В частности, я пытаюсь создать шаблон электронной почты HTML, содержащий диаграмму, и хочу, чтобы пользователь мог выбрать все > скопировать/вставить в свой почтовый клиент вместо копирования/вставки, экспортировать изображение, а затем найти способ вставить его в электронное письмо.
Я нашел это: Захват HTML Canvas как gif/jpg/png/pdf?, но код, похоже, не отображает изображение в документе.
Ответы
Ответ 1
Здесь серверное решение на основе 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]"/>
Он работает в браузере.
Ответ 2
Вот взломать, если у вас есть сердце, использующее 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+'"/>');
Ответ 3
Я знаю, что теперь это старый вопрос, но поскольку он появился в # 1 для меня в результатах поиска Google, я думаю, стоит упомянуть, что Highcharts теперь изначально поддерживает создание образа на стороне сервера script, и он отлично работает.
Ответ 4
С информацией из Render charts на сервере "(из jkraybills answer), я создал этот минимальный пример, используя Ajax, чтобы получить изображение графика, который не был отображен, и отобразить его в img
-tag.
HTML:
<img id="chart" style="width: 600px;" />
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);
}
});
Как в эта демонстрация JSFiddle.
Остальная часть параметра POST (width
, callback
...) в документации.