Paper.js предоставляет мощные средства для работы с векторной графикой, и одним из ключевых инструментов является возможность импорта файлов SVG. SVG (Scalable Vector Graphics) — это текстовый формат, описывающий векторные изображения с помощью XML. Paper.js позволяет превращать SVG в объекты Paper.js, сохраняя структуру и возможности дальнейшей манипуляции.
Для загрузки SVG в Paper.js используется метод
project.importSVG(). Он принимает несколько типов
аргументов:
Строка SVG Можно передать полный XML-код SVG в виде строки:
var svgString = '<svg><circle cx="50" cy="50" r="40" fill="red"/></svg>';
var item = project.importSVG(svgString);
В этом случае Paper.js создаёт объект Item,
соответствующий структуре SVG, с сохранением всех элементов.
URL файла SVG Для загрузки SVG из внешнего файла
можно использовать AJAX или fetch, а затем передать строку в
importSVG:
fetch('example.svg')
.then(response => response.text())
.then(svgText => {
var item = project.importSVG(svgText);
});
При необходимости можно обрабатывать SVG асинхронно, чтобы не блокировать рендеринг.
DOM-элемент SVG Если SVG уже встроен в HTML-документ, можно передать DOM-элемент:
var svgElement = document.getElementById('mySVG');
var item = project.importSVG(svgElement);Импортированные SVG-элементы превращаются в иерархию объектов Paper.js. Основные моменты:
<g> в SVG
становятся объектами Group. Можно применять трансформации,
стили и анимацию к всей группе.<path>,
<circle>, <rect> и другие
преобразуются в объекты Path или специализированные формы
(Path.Circle, Path.Rectangle).CompoundPath, который поддерживает
сложные контуры с внутренними “дырами”.var circle = item.children[0]; // доступ к первому элементу внутри группы
circle.fillColor = 'blue'; // изменение заливки
Paper.js автоматически конвертирует атрибуты SVG в свойства объектов:
fill → fillColorstroke → strokeColorstroke-width → strokeWidthopacity → opacitytransform → трансформации объекта
(position, rotation,
scaling)Важно помнить, что Paper.js не поддерживает все CSS-эффекты SVG
(например, фильтры <filter> или градиенты в сложной
форме), поэтому для таких случаев возможна частичная потеря визуальной
информации.
item.strokeColor = 'black';
item.strokeWidth = 2;
item.opacity = 0.8;
Импортированные SVG-объекты могут иметь произвольные размеры и
координаты. Для их нормализации применяются методы scale,
translate и fitBounds:
item.position = view.center; // центрирование объекта
item.fitBounds(new Rectangle(0, 0, 300, 300)); // масштабирование под заданный прямоугольник
SVG-файлы часто содержат вложенные группы, маски и клиппинги. Paper.js корректно интерпретирует:
clipMaskGroupЭто позволяет легко создавать интерактивные сцены и анимации, сохраняя структуру SVG.
Импортированные SVG можно изменять программно, добавляя анимацию, события мыши и взаимодействие с другими объектами Paper.js:
item.onMouseEn ter = function(event) {
this.fillColor = 'green';
};
item.onFr ame = function(event) {
this.rotate(1);
};
Такой подход превращает статические SVG в полностью интерактивные объекты на канвасе.
После модификации объектов их можно экспортировать обратно в SVG с
помощью метода exportSVG():
var svgOutput = item.exportSVG({ asString: true });
console.log(svgOutput);
Это позволяет сохранять динамически созданную или изменённую графику для последующего использования.
gradient и pattern ограничена,
возможна частичная конвертация в заливки Color.Импорт SVG в Paper.js сочетает в себе сохранение векторной структуры и гибкость программного управления объектами, позволяя создавать интерактивные, динамичные векторные сцены прямо на HTML5 Canvas.