Javascript 在python服务器上从Fabric.JSON构建图像

Javascript 在python服务器上从Fabric.JSON构建图像,javascript,python,node.js,canvas,fabricjs,Javascript,Python,Node.js,Canvas,Fabricjs,使用python,是否可以从fabric.js画布的json表示重建图像 使用django很容易,但我使用的是django,因此我不希望运行单独的node.js服务器来创建这些图像并将其发送到django服务器。否 如果不编写结构的Python端口(或自定义解析器+渲染器),我看不出这是怎么可能的 原因如下: JSON数据字符串包含各种结构形状的自定义表示,在结构的loadFromJSON解析和解释过程中,这些形状都被加载并呈现到画布上。然后可以使用画布生成图像 您可以用python解析数据,因

使用python,是否可以从fabric.js画布的json表示重建图像

使用django很容易,但我使用的是django,因此我不希望运行单独的node.js服务器来创建这些图像并将其发送到django服务器。

如果不编写结构的Python端口(或自定义解析器+渲染器),我看不出这是怎么可能的

原因如下:

JSON数据字符串包含各种结构形状的自定义表示,在结构的
loadFromJSON
解析和解释过程中,这些形状都被加载并呈现到画布上。然后可以使用画布生成图像

您可以用python解析数据,因为它只是JSON。你可以走过去分析它。您甚至可以“看到”需要加载到画布上的各种形状。但是你仍然需要做的主要事情是——创建这些形状的视觉表现


除非您手动执行此操作(使用Python中的某种图形方法;这听起来需要大量的工作),否则我认为没有其他方法可以完成。

您不必运行单独的节点服务器。但您确实需要一个节点运行时,并安装模块“canvas”和“fabric”。这样,您就可以从python代码中轻松调用nodejs脚本了

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://localhost.com/designs/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://localhost.com:5000/static/images/fabric/ts_rne_front.png", "meetOrSlice": "meet", "left": 0}, "background": "#bf1515"}'
subprocess.call(["node", "fabricImageGenerator.js", fabric_json, "outputImage.png"])
下面是一个示例js脚本,它将读取JSON输入并生成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://localhost.com/designs/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://localhost.com:5000/static/images/fabric/ts_rne_front.png", "meetOrSlice": "meet", "left": 0}, "background": "#bf1515"}'
subprocess.call(["node", "fabricImageGenerator.js", fabric_json, "outputImage.png"])