【问题标题】:Can't get image with canvas.getObjects();无法使用 canvas.getObjects() 获取图像;
【发布时间】:2018-01-01 00:00:29
【问题描述】:

为什么下一个函数找不到图像(当我使用调试器检查时,我可能会看到所有其他元素,但看不到图像)

function getItemByName3(name) {
     var object = null,
          objects = canvas.getObjects();
          objectsCount=canvas.getObjects().length;
     for (var i = 0, len = objectsCount; i < len; i++) {
       if (objects[i].type && objects[i].type == "image"){
            if (objects[i].id && objects[i].id===name) {
              object = objects[i];
             break;
            }
        } 
      }
      return object;
    }

     function backgroundSaveToJsonF(){                 ////____________________________________________saveJsonF;
    var backgroundImage=getItemByName3(document.getElementById("selectProject").value+"imageID");
    var backgroundImageForDB=JSON.stringify(backgroundImage.toObject(['id','sendToBack','selectable']));

我正在使用下一个代码将图像上传到画布:

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,
                id:document.getElementById("selectProject").value+"imageID"
            });
            canvas.setBackgroundImage(oImg).renderAll();
            var dataURL = canvas.toDataURL({
                format: 'png',
                quality: 0.8
            });
        });
    };
    reader.readAsDataURL(file);

});

谢谢

【问题讨论】:

    标签: 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();
                canvas.add(oImg);
                console.log(canvas.getObjects());
                var dataURL = canvas.toDataURL({
                    format: 'png',
                    quality: 0.8
                });
            });
        };
        reader.readAsDataURL(file);
    });
    
    var canvas = new fabric.Canvas('c');
    canvas.add(new fabric.Rect({
        left: 50,
        top: 50,
        height: 100,
        width:100,
        stroke: 'red',
        fill: ''
    }))
    canvas.add(new fabric.Text('1',{
        left: 20,
        top: 50,
        stroke: 'red',
        fill: ''
    }))
    canvas.renderAll();
    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>

    这是因为您将上传的图像设置为背景图像canvas.setBackgroundImage(oImg) 您没有将其作为对象添加到画布。如果您想在对象列表中获取它,请添加为对象canvas.add(oImg)。查看演示。

    【讨论】:

    • 谢谢。我希望图像始终具有较低的 zIndex。始终让其他对象位于图像的顶部。因为我想将背景图像与 DB 中的对象(另一个 Json 文件)分开保存为 Json。我在设置 zIndex 属性时遇到了麻烦。我想用背景图片,但看起来我必须更加努力才能得到我想要的东西。来自 Json1 的对象始终位于 Json2 中的图像之上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 2021-06-10
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多