Paper.js предоставляет мощный инструмент для работы с векторной
графикой в браузере на основе Canvas, и одной из ключевых возможностей
является импорт SVG-файлов. Использование метода importSVG
позволяет интегрировать готовые векторные рисунки в Paper.js-проекты без
необходимости вручную воссоздавать каждый элемент через Paper.js
API.
Метод project.importSVG используется для загрузки и
преобразования SVG-документов в объекты Paper.js. Синтаксис метода:
var item = project.importSVG(source, options);
Параметры:
source – строка с SVG-кодом, URL к SVG-файлу или объект
DOM SVG.options – объект с дополнительными настройками
импорта.Ключевые свойства объекта options:
insert (Boolean) – указывает, следует ли автоматически
добавлять импортированный объект в проект (по умолчанию
true).expandShapes (Boolean) – преобразует сложные фигуры,
такие как <path> или <polygon>, в
отдельные кривые (Path) для дальнейшего редактирования.applyMatrix (Boolean) – применяет трансформации из SVG
(scale, rotate, translate) к координатам объектов.onLoad (Function) – колбэк, вызываемый после успешной
загрузки.onError (Function) – колбэк для обработки ошибок при
импорте.Для работы с SVG-кодом, представленным в виде строки, используется следующий подход:
var svgString = `
<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" r="40" fill="red"/>
</svg>
`;
var importedItem = project.importSVG(svgString, {
expandShapes: true,
onLoad: function(item) {
item.position = view.center;
}
});
В этом примере элемент <circle> преобразуется в
объект Path.Circle, который можно перемещать, изменять
цвет, масштабировать и интегрировать в анимации Paper.js.
Если SVG-файл находится на сервере, его можно загрузить по URL:
project.importSVG('/images/icon.svg', {
onLoad: function(item) {
item.scale(2);
item.position = view.center;
},
onError: function(message) {
console.error('Ошибка импорта SVG:', message);
}
});
Особенности:
После импорта SVG Paper.js создаёт иерархию объектов, соответствующую структуре SVG:
<svg> → Group<g> → Group<path> → Path<circle> → Path.Circle<rect> → Path.Rectangle<ellipse> → Path.Ellipse<line> → Path с двумя точками<polygon> / <polyline> →
Path с массивом точекИспользование опции expandShapes: true преобразует
объекты Shape в кривые (Path), что даёт полный
контроль над сегментами кривых.
Импортированные SVG часто содержат группы (<g>). В
Paper.js они становятся объектами Group, которые
поддерживают:
children – массив всех вложенных элементов.position – центр группы, который можно использовать для
трансформаций.rotate, scale,
translate – применяются ко всей группе одновременно.Пример:
var svgGroup = project.importSVG(svgString);
svgGroup.rotate(45);
svgGroup.children[0].fillColor = 'blue';
Вложенные элементы могут быть изменены индивидуально, сохраняя при этом общую структуру группы.
SVG-файлы часто содержат атрибуты трансформации
(transform="rotate(45) translate(10,20)"). В Paper.js они
могут быть:
applyMatrix: true.applyMatrix: false для сохранения оригинальной
матрицы.Пример:
project.importSVG(svgString, {
applyMatrix: true,
onLoad: function(item) {
item.position = view.center;
item.rotate(30);
}
});
Это позволяет управлять трансформациями как в SVG, так и через Paper.js API.
Опции onLoad и onError позволяют
отслеживать результат импорта и производить действия после загрузки:
project.importSVG('/images/logo.svg', {
onLoad: function(item) {
console.log('SVG успешно загружен', item);
},
onError: function(error) {
console.error('Не удалось загрузить SVG:', error);
}
});
Такой подход особенно важен при работе с динамическими SVG-файлами из сети.
filter, градиенты
gradientTransform) поддерживаются напрямую.<text>) импортируются как
PointText с базовыми стилями, но сложное форматирование
может быть потеряно.expandShapes: true для
полной совместимости с Paper.js.Для проектов с множеством импортов полезно:
expandShapes: true для редактирования
отдельных кривых.Group) для пакетных
трансформаций.Импорт SVG через importSVG превращает Paper.js в
полноценный инструмент для работы с внешней векторной графикой, позволяя
сочетать готовые SVG с интерактивными возможностями Canvas и гибким API
Paper.js.