代码之家  ›  专栏  ›  技术社区  ›  Ashish

Fabricjs:在画布上更新SVG

  •  1
  • Ashish  · 技术社区  · 7 年前

    我使用的是fabricjs 1.6.4,我想用新的svg更新现有的svg。我使用以下代码添加新的SVG:

    fabric.loadSVGFromURL(url, function (objects, options) {
              var image = fabric.util.groupSVGElements(objects, options);
              image.name = 'sticker';
              canvas.add(image);
              image.scaleToHeight(100);
              image.center();
              image['selectable'] = false;
              image['evented'] = false;
              image.setCoords();
              canvas.renderAll();
            });
          }
    

    如何用新的SVG替换现有的SVG。我已经在图像中做了一些与此相关的事情,但是我不能在SVG中复制。以下是图像的代码:

    $scope.fillImage = function(src) {
        fabric.Image.fromURL(src, function(img) {
            var object = canvas.getActiveObject();
            object._element.src = src;
            canvas.renderAll();
        });
    }
    

    我需要这样的东西。请帮忙。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Helder Sepulveda    7 年前

    image 只需使其成为全局的,你可以在添加之前删除。。。
    下面是一个例子:

    var image;
    var canvas = new fabric.Canvas('canvas');
    var url = "http://swagger-net-test.azurewebsites.net/api/SvgImage?"
    
    function callback(objects, options) {
      if (image) canvas.remove(image);
      image = fabric.util.groupSVGElements(objects, options);
      image.name = 'sticker';
      canvas.add(image);
      image.scaleToHeight(60);
      image.center();
      image.setCoords();
      canvas.renderAll();
    }
    
    fabric.loadSVGFromURL(url + "color=red", callback)
    setTimeout(
      function() {
        fabric.loadSVGFromURL(url + "color=blue", callback)
      },
      3000
    );
    <canvas id="canvas" width="180" height="180"></canvas>
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.3.4/fabric.min.js"></script>