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