В моем случае я использую Highcharts для рендеринга диаграмм. Эта библиотека дает графики в SVG. Я хочу сохранить изображение/png из этого SVG, сохраненной стороны сервера, поэтому я могу использовать его там. Сначала я использую парсер canvg (https://github.com/gabelerner/canvg), чтобы захватить содержимое элемента SVG.Преобразование SVG в изображение/png с использованием JS/PHP
В моем случае у меня есть более одной диаграммы на странице. Требование состоит в том, чтобы захватить все из них, сохранить серверную сторону и использовать их в одном документе PDF.
код (JS), для этого:
// get the svg data from the chart holder
var svg = document.getElementById(DOMId).children[0].innerHTML;
// create a target canvas element
var target = document.getElementById('target1');
// bind svg data to the target canvas element
canvg(target, svg);
// convert svg data to an image/png;base64 format
var img = target.toDataURL('image/png');
img = img.replace('data:image/png;base64,', '');
// post data to application so the file can be saved
var bindata = "bindata=" + img;
$.ajax({
type: 'POST',
url: 'path-to-handler',
data: bindata,
success: function(data) { chartExported(data); }
});
В обработчике (PHP), я делаю это:
$image = imagecreatefromstring(base64_decode(
str_replace(' ', '+', $request->getPostParameter('bindata')
)));
if ($image !== false) {
imagepng($image, $filename);
imagedestroy($image);
return $this->renderText('success');
}
else {
return $this->renderText('error');
}
Полученное изображение просто полный черный что-то.
Если я использую следующее для коррекции альфа, изображение полностью белое.
imagealphablending($image, false);
imagesavealpha($image, true);
Я не могу понять, какой шаг неправильный.
Заранее спасибо ...
Экспортный модуль Highcharts способен экспортировать в PNG/JPG с помощью PhantomJS. http://www.highcharts.com/docs/export-module/export-module-overview – Bell
Я просмотрел PhantomJS, я не могу установить его на производственный сервер. – Harmster