Библиотека SVG.js предоставляет удобные методы для работы с графикой SVG и их последующего экспорта в текстовый формат. Экспорт в SVG-строку позволяет сохранить текущее состояние документа или отдельного элемента для хранения, передачи или последующей вставки в HTML.
svg()Главный инструмент для экспорта — метод svg(). Он
применяется к любому элементу SVG, созданному через библиотеку, и
возвращает строку в формате SVG, содержащую весь внутренний контент
элемента.
Пример использования:
const draw = SVG().addTo('body').size(300, 300);
const circle = draw.circle(100).fill('#f06');
const svgString = draw.svg();
console.log(svgString);
Результатом будет строка вида:
<svg width="300" height="300">
<circle cx="50" cy="50" r="50" fill="#f06"/>
</svg>
Особенности:
svg() без аргументов возвращает только
внутреннее содержимое элемента, если вызван на контейнере, и
весь элемент, если вызван на корневом объекте SVG().svg(content), она
заменяет текущее содержимое элемента.Для отдельных графических элементов экспорт также доступен через
svg():
const rect = draw.rect(100, 50).fill('blue');
const rectSVG = rect.svg();
console.log(rectSVG);
Результат:
<rect width="100" height="50" fill="blue"/>
Особенности:
svg() экспортирует
только его собственные атрибуты, не затрагивая родителя.<svg>Чтобы получить полную SVG-строку с корневым тегом
<svg>, удобно использовать метод svg()
на корневом контейнере:
const fullSVG = draw.svg();
toString()Метод toString() для элементов SVG.js возвращает
аналог svg(), но с дополнительной
возможностью интеграции в шаблоны:
console.log(rect.toString());
Внутри библиотека вызывает svg() и возвращает строку с
корректными атрибутами и пространствами имен.
SVG.js сохраняет инлайн-стили и атрибуты, но внешние CSS не включаются автоматически.
Чтобы экспортировать с текущими стилями, лучше использовать:
attr() для явного присвоения свойств;style() для инлайн-стилей:circle.style({
stroke: 'black',
'stroke-width': 5
});
console.log(circle.svg());
Результат:
<circle cx="50" cy="50" r="50" fill="#f06" stroke="black" stroke-width="5"/>
Для сохранения на диск или отправки на сервер можно преобразовать строку в Blob:
const blob = new Blob([draw.svg()], { type: 'image/svg+xml' });
const url = URL.createObjectURL(blob);
// Пример: ссылка для скачивания
const a = document.createElement('a');
a.href = url;
a.download = 'drawing.svg';
document.body.appendChild(a);
a.click();
SVG.js хранит трансформации (translate,
rotate, scale) и анимации в
атрибутах:
rect.rotate(45, 50, 25);
console.log(rect.svg());
Вывод:
<rect width="100" height="50" fill="blue" transform="rotate(45 50 25)"/>
animate(), не
сохраняются в виде активного JavaScript-кода — экспортируются только
текущие значения атрибутов.svg() на корневом
контейнере, если требуется полный SVG-документ.attr() и style() для
всех визуальных свойств, которые должны попасть в экспорт.Экспорт в SVG-строку в SVG.js является мощным инструментом, обеспечивающим гибкость как для веб-приложений, так и для генерации файлов. Он сохраняет структуру, трансформации и стили, предоставляя полностью валидный SVG-код, готовый к использованию в любых средах.