Fabricjs:在画布上更新 SVG

Posted

技术标签:

【中文标题】Fabricjs:在画布上更新 SVG【英文标题】:Fabricjs: Update SVG on the canvas 【发布时间】:2019-01-20 22:23:35 【问题描述】:

我使用的是 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();
    );

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

【问题讨论】:

获取现有 svg 对象的索引,然后使用 insertAt(object,index) 替换为相同的索引。 【参考方案1】:

您已经拥有变量 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"  ></canvas>

<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.3.4/fabric.min.js"></script>

【讨论】:

所以,您正在删除旧图像并添加新图像 @Ashish 正确,你还有别的想法吗? 我也有同样的想法,但如果可能的话,我一直在寻找更好的解决方案......我对图像做了同样的事情,但没有删除之前的图像,但我无法用SVG。如果你愿意,我也可以粘贴该图像代码 我已经编辑了我的问题。在图像中,我刚刚用新属性替换了 element.src 属性,它工作正常。我一直在寻找这样的东西。

以上是关于Fabricjs:在画布上更新 SVG的主要内容,如果未能解决你的问题,请参考以下文章

集成 Fabricjs 和 Angularjs

FabricJS:始终在画布上居中对象

在 FabricJS 画布上拖放和删除对象

画布上的 FabricJS AngularJS 事件

如何使fabricJS画布在移动设备上可水平拖动?

使用 FabricJs 在同一画布上裁剪多个图像