Paper.js предоставляет мощные инструменты для работы с графическими
объектами и их сериализацией. Одним из ключевых методов является
exportJSON(), позволяющий преобразовать объекты Paper.js в
формат JSON для последующего сохранения, передачи или восстановления
состояния сцены.
exportJSON()Метод exportJSON() доступен у объектов типа
Project и позволяет сериализовать всю сцену или отдельные
элементы. Формат JSON сохраняет структуру объектов, их свойства и
вложенные элементы, обеспечивая точное восстановление при импорте через
importJSON().
// Сериализация всей сцены
var projectJSON = project.exportJSON();
console.log(projectJSON);
Ключевые моменты:
Сериализуются все объекты в project.activeLayer,
включая слои, группы, кривые, фигуры и текст.
Сохраняются основные свойства объектов: позиция, размер, цвет, трансформации.
Метод может принимать аргумент с настройками сериализации:
asString — если true, возвращает JSON как
строку, иначе как объект.precision — количество знаков после запятой для
числовых значений.Пример с настройками:
var jsonString = project.exportJSON({ asString: true, precision: 5 });
Метод exportJSON() можно применять не только к проекту,
но и к отдельным объектам, например к фигурам или группам. Это полезно,
когда необходимо сохранить только часть сцены.
var circle = new Path.Circle({
center: [100, 100],
radius: 50,
fillColor: 'red'
});
var circleJSON = circle.exportJSON({ asString: true });
console.log(circleJSON);
Особенности:
fillColor, strokeColor,
strokeWidth).Для сохранения JSON в браузере можно использовать объект
Blob и создать ссылку для скачивания:
function saveJSON(jsonData, filename) {
var blob = new Blob([jsonData], { type: 'application/json' });
var url = URL.createObjectURL(blob);
var link = document.createElement('a');
link.href = url;
link.download = filename;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
URL.revokeObjectURL(url);
}
// Сохранение сцены
saveJSON(project.exportJSON({ asString: true }), 'scene.json');
Пояснения:
Blob создаёт объект, содержащий данные JSON в нужном
MIME-типе.URL.createObjectURL генерирует временную ссылку для
скачивания.link.click() инициирует скачивание, а
URL.revokeObjectURL очищает память.Для восстановления состояния сцены используется метод
importJSON(). Он принимает либо строку JSON, либо объект,
возвращённый exportJSON() с
asString: false.
var savedJSON = project.exportJSON({ asString: true });
var newProject = new Project();
newProject.importJSON(savedJSON);
Важные моменты:
Paper.js позволяет управлять детализацией числовых данных при экспорте. Это особенно важно для оптимизации размера JSON и точного восстановления сложных кривых.
var jsonHighPrecision = project.exportJSON({ asString: true, precision: 8 });
var jsonLowPrecision = project.exportJSON({ asString: true, precision: 2 });
Рекомендации:
exportJSON() автоматически сохраняет стандартные
свойства объектов, но можно также добавлять свои данные через
data:
var rectangle = new Path.Rectangle({
point: [50, 50],
size: [200, 100],
fillColor: 'blue'
});
rectangle.data.customInfo = {
author: 'Designer',
layer: 'Background'
};
var rectJSON = rectangle.exportJSON({ asString: true });
При импорте importJSON() сохранит эти пользовательские
данные:
var importedRect = project.importJSON(rectJSON);
console.log(importedRect.data.customInfo.author); // "Designer"
Преимущества:
| Функция / Метод | Назначение |
|---|---|
exportJSON() |
Сериализация проекта или объекта в JSON |
importJSON() |
Восстановление объектов из JSON |
Blob + URL.createObjectURL |
Сохранение JSON в файл для скачивания |
data |
Хранение пользовательских свойств для объектов |
precision |
Управление точностью числовых значений при экспорте |
asString |
Определяет формат вывода: строка или объект JSON |
Эти возможности делают Paper.js удобным инструментом для хранения и передачи графических данных в формате JSON, обеспечивая гибкость и точность в работе с динамическими сценами.