Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Fabric.js-canvas.toDatalessJSON未按预期工作_Javascript_Html_Canvas_Fabricjs - Fatal编程技术网

Javascript Fabric.js-canvas.toDatalessJSON未按预期工作

Javascript Fabric.js-canvas.toDatalessJSON未按预期工作,javascript,html,canvas,fabricjs,Javascript,Html,Canvas,Fabricjs,这是我将图像加载到画布的方式: $(".img-link").on("click", function(e) { e.preventDefault(); var url = $(this).attr('href'), extension = url.substr((~-url.lastIndexOf(".") >>> 0) + 2); if(extension !== 'svg') { fabric.Image.from

这是我将图像加载到画布的方式:

$(".img-link").on("click", function(e) {
    e.preventDefault();
    var url = $(this).attr('href'),
        extension = url.substr((~-url.lastIndexOf(".") >>> 0) + 2);

    if(extension !== 'svg') {
        fabric.Image.fromURL( url, function(oImg) {
            var ow = oImg.getWidth(),
                oh = oImg.getHeight();

            oImg.lockUniScaling = true;
            oImg.set({'left': ow/2, 'top': oh/2});
            canvas.add(oImg);
        });
    } else {
        var group = [];
        fabric.loadSVGFromURL(url, function(objects,options) {
        var loadedObjects = new fabric.Group(group);
        loadedObjects.set({
                left: 100,
                top: 100,
                sourcePath: url
        });
        canvas.add(loadedObjects);
        canvas.renderAll();
        },function(item, object) {
                object.set('id',item.getAttribute('id'));
                group.push(object);
        });
    }
});
console.log(JSON.stringify(canvas.toDatalessJSON())
提供以下输出:

{“objects”:[{“type”:“group”,“originX”:“center”,“originY”:“center”,“left”:100,“top”:100,“width”:200,“height”:200,“fill”:“rgb(0,0,0)”,“overlayFill”:null,“strokeWidth”:1,“strokeDashArray”:null,“strokeLineCap”:“butt”,“strokeLineJoin”:“斜接”,“strokeLiterLimit”:10,“scaleX”:1,“scaleY”:1,“角度”:0,“flipX”:false,“flipY”:false,“不透明度”:1,“shadow”:null,“visible”:true,“clipTo”:null,“objects”:[{“type”:“path”,“originX”:“center”,“originY”:“center”,“left”:0,“top”:0,“width”:200,“height”:200,“fill”:“#aa0000”,“overlayFill”:null,“strokeDashArray”:null,“strokeLineCap”:“butt”,“strokeLineJoin”:“mit”,“strokeimit”:10,“scaleX”:1,“scaleY”:1,“angle”:0,“flipX”“:false,“flipY”:false,“opacity”:1,“shadow”:null,“visible”:true,“clipTo”:null,“path”:[“M”,91.5,73],“c”,0,-30,40,-30,40,0],“c”,0,30,-40,60],“c”,0,0,-40,-40,-60],“pathOffset:{“x”:0,“y”:0}}}],“background”:

如果我选中
canvas.item(0).sourcePath,它会给我
heart.svg

怎么了


谢谢

看起来您在
fabric.Group
对象上设置了
sourcePath
属性,而不是
fabric.Path

如果将
sourcePath
属性设置为路径对象,则该属性应能正常工作。

您使用的是
fabric.Group
,而不是
fabric.path
fabric.PathGroup
。只有
fabric.PathGroup
fabric.Path
在调用
canvas.toDatalessJSON()
时,才会将路径定义替换为sourcePath url。 将该代码用于svg元素:

fabric.loadSVGFromURL(url, function(objects, options) {
   // Group elements to fabric.PathGroup (more than 1 elements) or
   // to fabric.Path
   var loadedObject = fabric.util.groupSVGElements(objects, options);
   // Set sourcePath
   loadedObject.set('sourcePath', url);

   canvas.add(loadedObject);
});
在这里您可以看到一个JSFIDLE:


在JSFIDLE中,您使用的是fabric.Image,而不是fabric.Path。

@Kienz不是画布。当我已经设置了
sourcePath:url
时,toDatalessJSON()应该将
url
返回SVG路径,而不是SVG路径。谢谢。这似乎对我起了部分作用。当我使用fabric.Path时,SVG根本不会被渲染,但当我使用
fabric.PathGroup
时,SVG被渲染得很好,
canvas.datalessjsson()
似乎工作得很好,但现在我失去了
选择
SVG对象以便移动或修改它的能力。@LuckySoni你能创建一个小的JSFIDLE示例吗?奇怪。。它在小提琴中对我有效,我猜是“其他代码”(我在小提琴中省略了它以保持整洁)弄乱了。如果你有时间,一定要看一看完整的例子。非常感谢。实际上,在我的小提琴中,我使用了
fabric.Image
来处理非SVG对象。对于SVG对象,我使用了
fabric.loadSVGFromURL
:)