2015-08-21 4 views
0

Я использую fabric.js для добавления объекта изображения в холст. Сериализация работает нормально, но после десериализации объект canvas пуст. console.log (JSON.stringify (холст)) возвращает: { "объекты": [], "фон": ""}Сериализация и десериализация холста с объектами изображения (Fabricjs)

вот мой код:

var canvas = new fabric.Canvas('goCanvas'); 

fabric.Image.fromURL("rooryteam03da088a.jpeg", function(oImg) { 
     canvas.add(oImg); 
}); 

var serialized = JSON.stringify(canvas); 

canvas.clear(); 

canvas.loadFromDatalessJSON(serialized); 

console.log(JSON.stringify(canvas)); 

Я также попытался loadFromJSON вместо loadFromDatalessJSON для десериализации, но без результата. Итак, что я делаю неправильно?

ответ

2

fabric.Image.fromURL is асинхронный. Вы stringify полотна до получения изображения, вы должны переместить этот код на грузовом изображение обратного вызова:

var canvas = new fabric.Canvas('goCanvas'); 

fabric.Image.fromURL("rooryteam03da088a.jpeg", function(oImg) { 
    canvas.add(oImg); 

    var serialized = JSON.stringify(canvas); 
    canvas.clear(); 
    canvas.loadFromDatalessJSON(serialized); 
    console.log(JSON.stringify(canvas)); 
}); 
+0

К сожалению, ничего не изменилось, после десериализации холста все еще пусто. –

+0

Вы были правы. console.log (JSON.stringify (холст)) возвращается пустая строка, поскольку она должна быть записан в обратном вызове функции "loadFromJSON", как это: canvas.loadFromJSON (сериализации, функция() { \t \t canvas.renderAll(); \t \t console.log (JSON.stringify (canvas)); }); –

1

Переменных сериализованные становится ссылкой на объект холст. Когда вы вызываете canvas.clear(), вы очищаете холст, и, таким образом, ваша переменная сериализуется, а какие холсты ссылок также становятся пустыми.

Я не выполняю то, что вы пытаетесь достичь, поскольку вы очищаете холст только для добавления к нему того же содержимого, поэтому не знаете, как предложить альтернативный вариант.

+0

я удалил canvas.clear(), создал новый холст и попробовал newcanvas.loadFromJSON (сериализован), но ничего не изменилось. то я удалил добавление изображения obj и просто добавил треугольник, и он как сериализация, так и десериализация были прекрасны. похоже, что у меня проблема с сериализацией и десериализацией холста с объектами изображения. –

Смежные вопросы