【问题标题】:how to draw image from svg path array using imageMagick in PHP如何在 PHP 中使用 imageMagick 从 svg 路径数组中绘制图像
【发布时间】:2019-03-06 06:58:37
【问题描述】:

我正在开发一个允许用户设计名片的网络项目。我在 Codeigniter 中使用 Fabric js 库, 我正在将 Canvas 转换为 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;
        },

【问题讨论】:

    标签: svg fabricjs imagick


    【解决方案1】:

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

     toObject : function( propertiesToInclude ) {
            var o = extend( this.callSuper( 'toObject', ['sourcePath', 'pathOffset'].concat( propertiesToInclude ) ), {
                svg  : this.toSVG()
            } );
            return o;
        },
    

    之后,您在 php.ini 中就有了 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);
    

    示例: https://jsfiddle.net/6hbnjfw1/4/

    更新 2: https://jsfiddle.net/6hbnjfw1/6/

    【讨论】:

    • 但我使用的是 toJSON() 方法
    • 你用的是什么版本的fabricjs?
    • Fabric 版本 2.3.6
    • toJSON 方法从 canvas 为每个对象调用 toObject(你需要添加 svg 参数)
    • 哦,但是你能展示一些示例代码吗,这是我第一次使用fabric js。
    猜你喜欢
    • 2017-03-10
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 2017-04-22
    • 1970-01-01
    • 2018-01-11
    相关资源
    最近更新 更多