Paper.js предоставляет гибкие возможности для экспорта графических
объектов и проектов в различные форматы. Основным способом является
использование методов объектов Project и Item,
которые позволяют получать данные в формате SVG, Canvas или изображений.
Экспорт можно настроить так, чтобы сохранялись все параметры объектов,
стили и трансформации.
SVG (Scalable Vector Graphics) является стандартным форматом для векторной графики. Paper.js обеспечивает прямой экспорт любого объекта в SVG с сохранением его стилей, трансформаций и иерархии групп.
Метод exportSVG:
var circle = new Path.Circle({
center: [100, 100],
radius: 50,
fillColor: 'red',
strokeColor: 'black',
strokeWidth: 2
});
var svg = circle.exportSVG({ asString: true });
console.log(svg);
Параметры exportSVG:
asString – если true, возвращает строку
SVG, если false, возвращает объект DOM.precision – количество знаков после запятой для
координат (по умолчанию 5), что позволяет уменьшить размер SVG без
потери точности.matchShapes – при значении true пытается
сохранять примитивные формы (круги, прямоугольники) как
<circle> и <rect>, а не как кривые
<path>.Пример с настройкой точности и сохранением форм:
var svg = circle.exportSVG({
asString: true,
precision: 2,
matchShapes: true
});
Экспорт всего проекта включает все слои и объекты. Для этого
используется project.exportSVG():
var group = new Group([circle, new Path.Rectangle({
point: [50, 50],
size: [100, 100],
fillColor: 'blue'
})]);
var projectSVG = project.exportSVG({ asString: true });
Настройка экспорта проекта позволяет сохранять структуру групп, слоев
и их стили. Опция matchShapes особенно полезна для
оптимизации SVG.
Для получения PNG или JPEG Paper.js может отрисовать проект на HTML
Canvas, а затем извлечь изображение с помощью
toDataURL():
var canvas = document.createElement('canvas');
canvas.width = 500;
canvas.height = 500;
var raster = project.activeLayer.rasterize();
var context = canvas.getContext('2d');
raster.draw(context);
var dataURL = canvas.toDataURL('image/png');
Особенности растрового экспорта:
rasterize() создаёт растровое изображение из
векторного объекта с указанным разрешением.resolution, чтобы получить изображение
более высокого качества.alpha = true.Paper.js сохраняет все стили, но иногда требуется изменить их для
экспорта. Можно использовать временные копии объектов и модифицировать
fillColor, strokeColor или
strokeWidth:
var tempCircle = circle.clone();
tempCircle.fillColor = 'green';
var svgString = tempCircle.exportSVG({ asString: true });
tempCircle.remove();
Такой подход позволяет подготовить файл с индивидуальными настройками, не изменяя оригинальные объекты на сцене.
precision: 1.<path>
через matchShapes: false позволяет получить единообразный
формат для обработки в других инструментах.Paper.js позволяет экспортировать каждый объект отдельно с собственными параметрами:
var items = project.activeLayer.children;
items.forEach(function(item) {
var svgItem = item.exportSVG({ asString: true, precision: 2 });
console.log(svgItem);
});
Такой подход полезен для пакетного создания SVG-иконок, слоёв для веб-анимаций или генерации ассетов.
rasterize для сложных сценДля сложных композиций с прозрачными объектами или эффектами:
var raster = project.activeLayer.rasterize({ resolution: 2 });
var dataURL = raster.toDataURL();
resolution позволяет управлять DPI изображения.dataURL можно сохранить PNG через
<a> с download или отправить на
сервер.Настраиваемый экспорт в Paper.js обеспечивает полный контроль над форматом, стилями и качеством изображения, делая библиотеку удобной для профессиональной работы с графикой в браузере.