Snap.svg能否仅在服务器端与Node.js一起使用?(不通过浏览器)

8

我需要使用一些服务器端代码(例如 cron 作业)创建和操作一些 SVG,但我想知道在不包含网页的情况下是否可以在这种情况下使用 Snap.svg。

如果没有在浏览器中运行 Snap.svg,这将可以工作吗?


1
不确定Node是否可以,但您可以使用PhantomJS或类似工具。 - Ian
@Ian 谢谢,那正是我现在正在研究的。 - Chad
1个回答

6
你可以使用 jsdom 模拟浏览器环境,在 Node.js 中原生运行 Snap.svg。
示例:
const jsdom = require('jsdom');
const xmlserializer = require('xmlserializer');

jsdom.env('', [require.resolve('snapsvg')], (error, window) => {
    if (error) throw error;

    const paper = window.Snap(100, 100);

    const rect = paper.rect(20, 20, 60, 60);
    rect.attr({fill: 'red'});

    const svg = xmlserializer.serializeToString(paper.node);
    window.close();

    console.log(svg);
});

输出:

<svg height="100" version="1.1" width="100" xmlns="http://www.w3.org/2000/svg"><desc>Created with Snap</desc><defs/><rect x="20" y="20" width="60" height="60" style="" fill="#ff0000"/></svg>

jsdom没有实现getBBox...所以它是相当无用的。 - Perry
我对无头/云端的SnapSVG很感兴趣,也许这个JSDOM+Node-Canvas(支持SVG)的实现可以帮助到我,Paper-jsdom-canvas - Big Rich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接