【问题标题】:Stringify only one object in Fabric.js在 Fabric.js 中仅对一个对象进行字符串化
【发布时间】:2013-10-28 21:31:03
【问题描述】:

我正在使用 fabricJS。这是一个很棒的绘图库。

var data = JSON.stringify(canvas);

上述命令用于以JSON 格式获取所有对象及其属性。但是,我只想对一个对象进行字符串化。

例如。使用织物创建一个矩形

var rec = new fabric.Rect({
    left: mouse_pos.x,
    top: mouse_pos.y,
    width: 75,
    height: 50,
    fill: 'white',
    stroke: 'black',
    strokeWidth: 3,
    padding: 10
  });
canvas.add(rec);

我希望仅将这个对象(矩形)的JSON 添加到画布中,而不是整个正在渲染的画布的JSON。 可能类似于var data = JSON.stringfy(rec);。有什么办法可以这样做,因为我想通过套接字发送添加到画布的最新对象,而不是整个画布对象,这反过来又会因为 JSON 对象大小而消耗不必要的带宽。

【问题讨论】:

    标签: javascript canvas fabricjs


    【解决方案1】:

    是的,你可以! :)

    var rect = new fabric.Rect({
        left: mouse_pos.x,
        top: mouse_pos.y,
        width: 75,
        height: 50,
        fill: 'white',
        stroke: 'black',
        strokeWidth: 3,
        padding: 10
      });
    
    canvas.add(rect);
    
    // get last item
    var obj = canvas.item(canvas.size() - 1);
    
    // stringify only one object
    var json = JSON.stringify(obj);
    

    【讨论】:

    • 完美!非常感谢@Keinz。我只想分享一件事:为了将来加载这个对象canvas.loadFromJSON(obj),必须在获取obj 后执行obj = '{"objects":['+ obj +']}';,否则fabric 会报告length Exception
    • 也许这篇文章对你有帮助:stackoverflow.com/a/19364574/2323945 canvas.loadFromJSON 需要对象属性。
    • 感谢@Kienz 的帮助!
    • 嘿@Kienz,请你帮我解决这个问题stackoverflow.com/questions/19692334/…
    【解决方案2】:

    你不能把你的选项对象转换成 JSON 吗?然后你可以通过套接字发送它,在你的接收器上获取 JSON,解析它并应用到 fabric.Rect 函数中以在那里绘制你的矩形。

    var options = {
        left: mouse_pos.x,
        top: mouse_pos.y,
        width: 75,
        height: 50,
        fill: 'white',
        stroke: 'black',
        strokeWidth: 3,
        padding: 10
    };
    
    var rec = new fabric.Rect(options);
    canvas.add(rec);
    
    var yourData = JSON.stringify(options); // turns your options object into JSON
    
    // ...rest of your code, that sends it through sockets...
    

    【讨论】:

    • isDrawingMode=true 的情况如何?路径会自动呈现到画布上,甚至无需显式添加到画布上?那么,我将如何设置选项并将它们字符串化?
    • 这样会增加在任何转换时手动更新每个选项的成本吗?织物中没有任何预定义的东西可以解决这个问题吗?
    • 嗯,我不太了解 Fabric.js。我真的不知道在这种情况下我会怎么做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 2012-07-17
    • 1970-01-01
    相关资源
    最近更新 更多