Node.js 节点上的结构,根本没有图像渲染

Node.js 节点上的结构,根本没有图像渲染,node.js,ubuntu,canvas,fabricjs,node-canvas,Node.js,Ubuntu,Canvas,Fabricjs,Node Canvas,这个问题出现在Ubuntu 14.04上: NodeJS:0.10.32 画布:1.3.6 面料:1.6.0-rc.1 JSON示例: { "objects": [{ "id": 0, "name": "1452525510_death_star.svg", "type": "image", "originX": "left", "originY": "top", "left": 78, "top": 21, "width": 51

这个问题出现在Ubuntu 14.04上: NodeJS:0.10.32 画布:1.3.6 面料:1.6.0-rc.1

JSON示例:

{
"objects": [{
    "id": 0,
    "name": "1452525510_death_star.svg",
    "type": "image",
    "originX": "left",
    "originY": "top",
    "left": 78,
    "top": 21,
    "width": 512,
    "height": 512,
    "fill": "rgb(0,0,0)",
    "stroke": null,
    "strokeWidth": 1,
    "strokeDashArray": null,
    "strokeLineCap": "butt",
    "strokeLineJoin": "miter",
    "strokeMiterLimit": 10,
    "scaleX": 0.46,
    "scaleY": 0.46,
    "angle": 0,
    "flipX": false,
    "flipY": false,
    "opacity": 1,
    "shadow": null,
    "visible": true,
    "clipTo": null,
    "backgroundColor": "",
    "fillRule": "nonzero",
    "globalCompositeOperation": "source-over",
    "transformMatrix": null,
    "_controlsVisibility": {
        "tl": false,
        "tr": true,
        "br": true,
        "bl": false,
        "ml": true,
        "mt": false,
        "mr": false,
        "mb": true,
        "mtr": true
    },
    "src": "http://somedomain.com/media/patterns/users/1fb158157a882d6a4c983ddc401101d1.svg",
    "filters": [{
        "type": "Tint",
        "color": "#c485c4",
        "opacity": 1
    }],
    "crossOrigin": "",
    "alignX": "none",
    "alignY": "none",
    "meetOrSlice": "meet"
}, {
    "id": 1,
    "name": "Baby inside",
    "type": "image",
    "originX": "left",
    "originY": "top",
    "left": 102,
    "top": 290,
    "width": 470,
    "height": 427,
    "fill": "rgb(0,0,0)",
    "stroke": null,
    "strokeWidth": 1,
    "strokeDashArray": null,
    "strokeLineCap": "butt",
    "strokeLineJoin": "miter",
    "strokeMiterLimit": 10,
    "scaleX": 0.5,
    "scaleY": 0.5,
    "angle": 0,
    "flipX": false,
    "flipY": false,
    "opacity": 1,
    "shadow": null,
    "visible": true,
    "clipTo": null,
    "backgroundColor": "",
    "fillRule": "nonzero",
    "globalCompositeOperation": "source-over",
    "transformMatrix": null,
    "_controlsVisibility": {
        "tl": false,
        "tr": true,
        "br": true,
        "bl": false,
        "ml": true,
        "mt": false,
        "mr": false,
        "mb": true,
        "mtr": true
    },
    "src": "http://somedomain.com/media/patterns/12.png",
    "filters": [{
        "type": "Tint",
        "color": "#FFFFFF",
        "opacity": 1
    }],
    "crossOrigin": "",
    "alignX": "none",
    "alignY": "none",
    "meetOrSlice": "meet"
}],
"background": "#b0b0b0",
"backgroundImage": {
    "id": 0,
    "name": "",
    "type": "image",
    "originX": "left",
    "originY": "top",
    "left": 0,
    "top": 0,
    "width": 470,
    "height": 574,
    "fill": "rgb(0,0,0)",
    "stroke": null,
    "strokeWidth": 1,
    "strokeDashArray": null,
    "strokeLineCap": "butt",
    "strokeLineJoin": "miter",
    "strokeMiterLimit": 10,
    "scaleX": 1,
    "scaleY": 1,
    "angle": 0,
    "flipX": false,
    "flipY": false,
    "opacity": 1,
    "shadow": null,
    "visible": true,
    "clipTo": null,
    "backgroundColor": "",
    "fillRule": "nonzero",
    "globalCompositeOperation": "source-over",
    "transformMatrix": null,
    "_controlsVisibility": null,
    "src": "http://somedomain.com/media/products/121_37_2.jpg",
    "filters": [],
    "crossOrigin": "",
    "alignX": "none",
    "alignY": "none",
    "meetOrSlice": "meet"
}
注意,使用toJSON()导出的JSON有一些自定义字段:[name,id]

这来自我的节点脚本:

 function savetoFile() {
  var jsonData = JSONfromAbove;
  var out = fs.createWriteStream(filepath);
  canvas = fabric.createCanvasForNode(470, 574);

  canvas.loadFromJSON(jsonData, function () {  
    CanvasZoom(parseInt(zoom), function(){
    console.log('after zooom');
    console.log(canvas.getObjects());

     var stream = canvas.createPNGStream();
     stream.on('data', function (chunk) { 
         out.write(chunk);
     });
     stream.on('end', function () {
        out.end();
     });     
    });

  });
}

function CanvasZoom(z, callback) {
      width = canvas.width;
      height = canvas.height;
      canvas.setWidth(width*z);
      canvas.setHeight(height*z);
      canvas.setZoom(z);
      canvas.renderAll.bind(canvas);
      callback();
  }
事实:

  • 无论我添加什么类型的对象(“图像”、“路径”, “路径组”)它们根本不渲染,除了文本和 也许(我没有测试过)路径不是来自URL的
  • 在上面的JSON中 有背景img-它不渲染太多
  • 没有任何错误,但是:

    OSX上相同的脚本可以正常工作,但:

    当我尝试添加“大”SVG文件时,它会给我: “给定的图像尚未完成加载” 适用于大量正常PNG

  • “渲染”最终PNG的时间与对象数量及其图像大小成正比,这可能表明它们正在加载某种类型的图像

    我已经安装了所有依赖的lib

    尝试添加一个类似的对象,但以相同的问题结尾:

    fabric.Image.fromURL('http://somedomain.com/media/patterns/12.png', function(oImg, e) {...});
    
    我打赌节点画布在URL上会以某种方式失败


    我花了将近两天的时间试图解决这个可怕的问题];>

    问题是www.somedomain.com上的文件是httpasswd,所以它无法下载文件,但没有抛出任何错误


    将1.6.0-rc1切换到1.5.X时,会出现一个错误:“分段错误”。

    上面的JSON还有一个问题:第一个对象的属性type='image',src设置为.svg'文件。这将不起作用:导致“给定图像尚未完成加载”错误。要解决这个问题,您需要使用fabric.loadSVGFromURL,我选择使用groups fabric.util.groupSVGElements创建它们。希望有人能帮忙:)