结构js – 生成的图像中的对象的位置与canvas中的不同

我正在尝试使用Fabric js来生成一些带有文本的图像。 但由于某种原因,生成的图像中文本的位置与canvas中的不一致。 以下是canvas中的图像:

在这里输入图像说明

但生成的图像如下所示:

在这里输入图像说明

我给canvas的尺寸是881×640,与我给图片的输出尺寸相同。

这是我目前在我的代码中做的。

我从URL中将背景图像添加到canvas中。 但在此之前,我首先将图像的大小调整为与canvas大小相同:

fabric.Image.fromURL(image_source, function(oImg) { oImg.width = canvas.width; oImg.height = canvas.height; canvas.add(oImg); }); 

然后,我将canvas.toJSON()调用的string化结果发送给节点js服务器,以使用AJAX生成图像:

 $.post('http://host:1212', {'canvas': JSON.stringify(canvas.toJSON())}); 

在服务器端,我加载对象并创build图像:

 var out = fs.createWriteStream(__dirname + '/uploads/' + file_name); var body = ''; request.on('data', function(data){ body += data; }); request.on('end', function(){ var request_params = qs.parse(body); //set to same size as the canvas on the client side var canvas = fabric.createCanvasForNode(881, 640); canvas.loadFromJSON(request_params.canvas, function(){ canvas.renderAll(); var stream = canvas.createPNGStream(); stream.on('data', function(chunk){ out.write(chunk); }); stream.on('end', function(){ //close filestream out.end(); }); }); 

任何想法哪里可以我错了?

也许你应该尝试添加canvas.calcOffset():

 fabric.Image.fromURL(image_source, function(oImg) { oImg.width = canvas.width; oImg.height = canvas.height; canvas.add(oImg); //HERE canvas.calcOffset() }); 

我有同样的问题。 原来在fabric.js中有一个在节点上渲染的bug。 在这里阅读: https : //github.com/kangax/fabric.js/issues/1754 。

要解决这个问题,请看node_modules / fabric / dist / fabric.js – 19376行

 _getLeftOffset: function() { // if (fabric.isLikelyNode) { // return 0; // } return -this.width / 2; } 

就像上面那样,注释掉if(fabcir.isLikelyNode)…

这为我修好了。