#javascript #html #svg #canvg
#javascript #HTML #svg #canvg
Вопрос:
Проверьте этот пример здесь : https://jsfiddle.net/znbptw0c
Этот SVG извлечен из библиотеки amCharts.
Но когда я меняю его на изображение canvas с помощью canvg и transform : scale
в SVG, это отсекает масштабированную часть, как я могу это исправить?
Я использую scale, потому что мне нужно увеличить разрешение, а не только размер.
Прямое изменение ширины / высоты SVG было бы не идеально, поскольку это могло бы испортить некоторые выравнивания в более широком контексте, и я хочу, чтобы размер шрифта также увеличился.
JS :
function svgToCanvas(svg){
const canvas = document.createElement('canvas');
svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
svg.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink')
canvg(canvas, svg.outerHTML);
window.open(canvas.toDataURL("image/png",1.0))
return canvas;
}
const svg = document.body.querySelector('svg');
svgToCanvas(svg)
HTML (слишком большой, пожалуйста, проверьте fiddle):
<svg version="1.1" style="position: absolute; width: 1366px; height: 693px; top: 0px; left: 0px;transform: scale(1.5);" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
...
</svg>
Комментарии:
1. Не масштабировать. Используйте это:
<svg viewBox="0 0 1366 693" version="1.1" style="position: absolute;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
вместо того, что у вас есть сейчас2. @enxaneta Но мне нужно масштабировать его, чтобы увеличить разрешение, также ваше решение только что сделало очень крошечный вывод
3. Элемент svg принимает размер контейнера. Возможно, проблема в элементе контейнера. Кроме того, вы можете попробовать поиграть с размером шрифта
4. Если вы не возражаете против пустого пространства вокруг диаграммы, вы можете попробовать другое окно просмотра:
<svg viewBox="330 0 700 693" version="1.1" style="position: absolute;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">