【问题标题】:Exclude element from canvas to be saved to json (fabric.js)从画布中排除元素以保存到 json (fabric.js)
【发布时间】:2017-12-22 19:32:36
【问题描述】:

我正在使用

 var jsonToPHP= JSON.stringify(canvas.toObject(['id','name']));

将所有从画布保存到 JSON。

我还在画布上添加背景图片。

document.getElementById('imgLoader').addEventListener("change", function (e) {   var file = e.target.files[0];   var reader = new FileReader();   reader.onload = function (f) {
    var data = f.target.result;                    
    fabric.Image.fromURL(data, function (img) {
    var oImg = img.set({left: 0, top: 0, angle: 00,width:canvas.width, height:canvas.height,}).scale(1);
    oImg.set('selectable', false);
    canvas.add(oImg).renderAll();
    var dataURL = canvas.toDataURL({format: 'png', quality: 0.8});
    });   };   reader.readAsDataURL(file);

});

但我想排除要保存到 JASON 的背景图片。

我在谷歌上搜索:

从画布中排除元素以保存到 json fabric.js

我还有下一个:

在 fabricjs 文档中有一个 Object 类调用的属性 'excludeFromExport'。

一旦设置为 true,它就会完全按照您的意愿行事。

www.fabricjs.com/docs

我去了:

来源:fabric.js,第 12350 行 excludeFromExport

现在呢?

我的知识是更少地从中获得结果。有没有人可以提供更多信息:也许是一个例子?

谢谢

【问题讨论】:

    标签: javascript json fabricjs


    【解决方案1】:

    演示

    document.getElementById('imgLoader').addEventListener("change", function(e) {
        var file = e.target.files[0];
        var reader = new FileReader();
        reader.onload = function(f) {
            var data = f.target.result;
            fabric.Image.fromURL(data, function(img) {
                var oImg = img.set({
                    left: 0,
                    top: 0,
                    angle: 00,
                    width: canvas.width,
                    height: canvas.height
                });
                canvas.setBackgroundImage(oImg).renderAll();
                var dataURL = canvas.toDataURL({
                    format: 'png',
                    quality: 0.8
                });
            });
        };
        reader.readAsDataURL(file);
    });
    
    var canvas = new fabric.Canvas('c', {
        serializeBgOverlay: false //to serialize background data toJson
    });
    
    canvas.backgroundColor = 'green';
    canvas.add(new fabric.Circle({
        left: 50,
        top: 50,
        radius: 50,
        stroke: 'red',
        fill: ''
    }))
    canvas.renderAll();
    
    // override _toObjectMethod and if you want to serialize background , set serializeBgOverlay true, while canvas initialize
    fabric.StaticCanvas.prototype._toObjectMethod = function(methodName, propertiesToInclude) {
        var data = {
            objects: this._toObjects(methodName, propertiesToInclude)
        };
    
        if (this.serializeBgOverlay) {
            fabric.util.object.extend(data, this.__serializeBgOverlay(methodName, propertiesToInclude));
        }
        fabric.util.populateWithProperties(this, data, propertiesToInclude);
        return data;
    }
    
    function exportToJson() {
        console.log(canvas.toJSON());
    }
    canvas{
     border:2px dotted blue;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.16/fabric.min.js"></script>
    <input type="file" id="imgLoader" accept="image/*"> <br>
    <canvas id='c' width='400' height='400'></canvas>
    <button onclick='exportToJson();'>ToJson</button>

    这里我添加了一个_toObjectMethod()的原型,它会排除canvas toJson导出的背景图片。

    【讨论】:

    • 谢谢。我今天在做其他事情。我的电子邮件地址没有收到任何通知,已添加对我的问题的答复。我明天去看看。
    • 此问题已被问题跟踪器上的用户报告为错误,并计划进行修复。您不需要对此进行特殊修复。
    • @AndreaBogazzi 不知道
    • 发生在 2 天前。巧合。
    • 我不明白这里发生了什么。
    猜你喜欢
    • 2013-03-23
    • 2014-10-13
    • 2012-05-03
    • 2015-04-09
    • 2018-11-14
    • 1970-01-01
    • 2012-12-01
    • 2015-10-17
    • 2014-04-13
    相关资源
    最近更新 更多