如何在PHP中使用imageMagick从svg路径数组中绘制图像

如何在PHP中使用imageMagick从svg路径数组中绘制图像,svg,fabricjs,imagick,Svg,Fabricjs,Imagick,我正在做一个允许用户设计名片的网络项目。我在Codeigniter中使用Fabric js库, 我正在将画布转换为JSON以使用imageMagick创建图像,并且我能够在设计中仅使用图像时打印图像,但是当我在画布中使用svg字符串并转换为JSON时,我得到了这些数据 我不知道,如何使用imageMagick从这些数据中创建图像。 请帮忙 stdClass Object ( [type] => path

我正在做一个允许用户设计名片的网络项目。我在Codeigniter中使用Fabric js库, 我正在将画布转换为JSON以使用imageMagick创建图像,并且我能够在设计中仅使用图像时打印图像,但是当我在画布中使用svg字符串并转换为JSON时,我得到了这些数据 我不知道,如何使用imageMagick从这些数据中创建图像。 请帮忙

stdClass Object
            (
                [type] => path
                [version] => 2.3.6
                [originX] => left
                [originY] => top
                [left] => 460.41162159184
                [top] => 201.78296829576
                [width] => 6.04
                [height] => 7.7
                [fill] => rgb(0,0,0)
                [stroke] => 
                [strokeWidth] => 1
                [strokeDashArray] => 
                [strokeLineCap] => butt
                [strokeLineJoin] => miter
                [strokeMiterLimit] => 10
                [scaleX] => 1
                [scaleY] => 1
                [angle] => 0
                [flipX] => 
                [flipY] => 
                [opacity] => 1
                [shadow] => 
                [visible] => 1
                [clipTo] => 
                [backgroundColor] => 
                [fillRule] => nonzero
                [paintFirst] => fill
                [globalCompositeOperation] => source-over
                [transformMatrix] => 
                [skewX] => 0
                [skewY] => 0
                [path] => Array
                    (
                        [0] => Array
                            (
                                [0] => M
                                [1] => 466.95
                                [2] => 203.98
                            )

                        [1] => Array
                            (
                                [0] => c
                                [1] => -2.17
                                [2] => 1.5
                                [3] => -1.59
                                [4] => 5.74
                                [5] => -5
                                [6] => 6
                            )

                        [2] => Array
                            (
                                [0] => c
                                [1] => -1.37
                                [2] => -1.29
                                [3] => -0.99
                                [4] => -4.34
                                [5] => -0.99
                                [6] => -7
                            )

                        [3] => Array
                            (
                                [0] => C
                                [1] => 464
                                [2] => 201.73
                                [3] => 464.84
                                [4] => 202.22
                                [5] => 466.95
                                [6] => 203.98
                            )

                        [4] => Array
                            (
                                [0] => z
                            )

                    )

            )
下面是JS代码,它将设计发布到PHP ImageMagick

savePNG : function(e) {

            savedCanvas[getItem('activeView')] = canvas.toJSON();
            var datas = JSON.stringify(savedCanvas);
            $.ajaxSetup({

                beforeSend: function(){
                    show_loader('show');
                },
            });
            $.post('studio/api/save', {csrf_token_name:token,designs:datas} ).done( function(data){
                console.log(data);
            }).always( function(){
                show_loader('hide');
            })
            return false;
        },

对于路径、矩形、圆等图形元素,可以使用toSVG方法。重写toObject方法并将svg参数放在那里

 toObject : function( propertiesToInclude ) {
        var o = extend( this.callSuper( 'toObject', ['sourcePath', 'pathOffset'].concat( propertiesToInclude ) ), {
            svg  : this.toSVG()
        } );
        return o;
    },
在这之后,就有了php中的svg元素。尝试创建包含该内容的空svg文件。在那之后,你可以用它作为一个图像或图形元素,我的建议是用它作为一个图形元素,因为它的结果是一个矢量形状

更新

从fabric.Object扩展toObject方法

//rewrite core
fabric.Object.prototype.toObject = (function (toObject) {
    return function () {

        return fabric.util.object.extend(toObject.call(this), {
            svgString: this.toSVG()
        });
    };
})(fabric.Object.prototype.toObject);
例如:

更新2:

但我使用的是toJSON,method您使用的是什么版本的fabricjs?canvas中的Fabric version 2.3.6toJSON方法为每个对象调用toObject,您需要添加svg参数OHH,但是您能展示一些示例代码吗?这是我第一次使用Fabric js。