繁体   English   中英

fabric.js 将 Image 对象添加到组

[英]fabric.js adding a Image object to a group

我认为/希望这是一个简单的问题:

是否可以像我在这里对其他元素所做的那样将 Image 对象添加到 fabric.group :

    var rect = new fabric.Rect({
    fill: "lightblue",
    stroke: "black",
    width: 155,
    height: 20,
    id: 'infosquare'
});



var text = new fabric.Text(label.toString( ), {
    fontSize: 11,
    fontFamily: "Verdana, sans-serif",
    fill: "black"

});



var stairInfo = new fabric.Group([rect, text], {
    left: x,
    top: y,
    borderColor: 'yellow',
    id: 'stairInfo',
    hasControls: false,
    selection: false,
    hasRotatingPoint: false
});

我发现的每个示例都将图像直接添加到画布,如下所示:

var target_pin = fabric.Image.fromURL('pics/pin_target.png', function (target_pin) {
        canvas.add(target_pin.set({
            top: top,
            left: left,
            hasControls: false,
            selection: false,
            hasRotatingPoint: false,
            scaleX: 0.07,
            scaleY: 0.07,
            id: 'target_pin'

        }));


        canvas.renderAll();
        canvas.bringToFront(target_pin);


    });

但我不想那样,我想将图像添加到上面的组中,然后将整个组返回到另一个函数。 我希望有人可以帮助我。

当然,这对我有用:

 var canvas = this.__canvas = new fabric.Canvas('c'); var myimg; var triangle = new fabric.Triangle({ left:0, top: 0, fill: 'green', width: 50, height: 50, }); var circle = new fabric.Circle({ left: 50, top: 0, radius: 50, fill: 'blue', }); fabric.Image.fromURL('http://fabricjs.com/site_assets/challengepost.png', function (oImg) { myimg = oImg.setLeft(100); var group = new fabric.Group([triangle, circle, myimg], { left: 50, top: 50, }); canvas.add(group); });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.6.4/fabric.min.js"></script> <canvas id="c"></canvas>

编辑:要回答第二个问题,这里要记住的主要事情是,在图像加载完成之前,您不能对图像对象执行任何操作。 在我的原始答案中,回调函数仅在图像加载后执行,然后将图像对象添加到组/画布中。 如果您想稍后在代码中执行此操作,则需要手动检查图像加载是否已完成,如下所示:

 var canvas = new fabric.Canvas('c'); var myimg; var group; var imageLoaded = false; function addGroup() { if (!imageLoaded) { // Image not loaded yet, need to wait setTimeout(function () { addGroup() }, 100); return; } // Ok we have the image, can add to group/canvas group = new fabric.Group([hi, rect, myimg], { left: 50, top: 50 }); canvas.add(group); } var hi = new fabric.Text('hello.', { left: canvas.getWidth() / 3, id: 'greetings' }); var rect = new fabric.Rect({ fill: 'red', width: 10, height: 100, id: 'square' }); var myimg; fabric.Image.fromURL('http://fabricjs.com/site_assets/challengepost.png', function (oImg) { myimg = oImg.setLeft(100); // Set flag when image loading complete imageLoaded = true; }); // Do some other stuff here addGroup();
 <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.6.4/fabric.min.js"></script> <canvas id="c"></canvas>

var rect = new fabric.Rect({
    fill: "lightblue",
    stroke: "black",
    width: 155,
    height: 20,
    id: 'infosquare'
});

var text = new fabric.Text(label.toString( ), {
  fontSize: 11,
  fontFamily: "Verdana, sans-serif",
  fill: "black"

});

var target_pin = fabric.Image.fromURL('pics/pin_target.png', function (target_pin) {
    var img1 = target_pin.set({
                  top: top,
                  left: left,
                  hasControls: false,
                  selection: false,
                  hasRotatingPoint: false,
                 scaleX: 0.07,
                  scaleY: 0.07,
                 id: 'target_pin'
});
var stairInfo = new fabric.Group([rect, text, img1], {
  left: x,
  top: y,
  borderColor: 'yellow',
  id: 'stairInfo',
  hasControls: false,
  selection: false,
  hasRotatingPoint: false
});
 canvas.add(stairInfo);

});

尝试这个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM