我正在尝试使用fabric.js(v0.9.21,通过ubuntu 12.04上的npm安装)和node.js在服务器上呈现画布(以后可以在没有客户端交互的情况下对其进行操作和扩展)。为了进行实验,我在客户端创建了一个简单的画布,然后使用canvas.toJSON()
方法将其导出为 JSON。当我尝试仅使用该 JSON 重新加载画布时,效果很好(利用canvas.loadFromJSON()
.
您可以在这个 fiddle中看到整个示例。
(如果它不起作用,那么图像可能已过期 - 替换链接)。
然后我尝试使用这个简单的脚本在服务器端做同样的事情:
var fabric = require('fabric').fabric;
var fs = require('fs');
var canvas = fabric.createCanvasForNode(570, 600);
fs.readFile('kitty.json', 'utf8', function(err, data) {
canvas.loadFromJSON(data);
});
运行此脚本(使用node script.js
or require('./script.js') from inside node
)时出现奇怪的崩溃:
> http.createClient is deprecated. Use `http.request` instead.
/usr/lib/node_modules/fabric/dist/all.js:12429
ctx.drawImage(
^
Error: Image given has not completed loading
at klass.fabric.Image.fabric.util.createClass._render (/usr/lib/node_modules/fabric/dist/all.js:12429:11)
at klass.fabric.Image.fabric.util.createClass.render (/usr/lib/node_modules/fabric/dist/all.js:12303:12)
at klass.(anonymous function) [as render] (/usr/lib/node_modules/fabric/dist/all.js:2405:48)
at extend._draw (/usr/lib/node_modules/fabric/dist/all.js:5332:16)
at extend.renderAll (/usr/lib/node_modules/fabric/dist/all.js:5468:16)
at extend.insertAt (/usr/lib/node_modules/fabric/dist/all.js:5381:37)
at fabric.util.object.extend._enlivenObjects (/usr/lib/node_modules/fabric/dist/all.js:7694:15)
at Array.forEach (native)
at fabric.util.object.extend._enlivenObjects (/usr/lib/node_modules/fabric/dist/all.js:7693:24)
at onLoaded (/usr/lib/node_modules/fabric/dist/all.js:1995:11)
画布上只有一张图片(由 interwebs 的小猫收藏提供)和一个文本项。
我对节点相当陌生,所以也许我在此过程中错过了一些东西 - 任何提示都会很棒。谢谢。