是否可以在不使用Cairo的情况下在nodejs中使用paperjs?

时间:2015-09-29 12:34:45

标签: node.js path cairo paperjs

我需要"阅读" nodejs中的一些paperjs路径的数组并获取它们的维度。我想使用纸质npm模块,但发现它依赖于 Cairo

当我部署到heroku时,使用Cairo有点困难。我知道它可能但我想知道它是否真的有必要只是为了阅读"路径组的维度。

1 个答案:

答案 0 :(得分:0)

当今的答案:
是的,这是可能的

——

引用from the docs

<块引用>

Paper.js 在 NPM 上有三个不同的版本:paper、paper-jsdom 和 paper-jsdom-canvas。根据您的用例,您需要不同的:

  • paper 是主库,可以直接在浏览器上下文中使用,例如网络浏览器或工作人员。
  • paper-jsdom 是 Node.js 的 shim 模块,通过 jsdom 为 SVG 导入和导出提供无头使用。
  • paper-jsdom-canvas 是 Node.js 的 shim 模块,通过 Node-Canvas 提供画布渲染以及通过 jsdom 导入和导出 SVG。

→ 如果您不需要渲染到画布,paper-jsdom 应该可以解决问题(不需要 Cairo)

——

重要提示:
如果我理解正确,这意味着您不能使用 PaperScript,而必须直接使用 JavaScript。
这将影响您编写代码的方式:

  • new paper.Path() 而不是 new Path()
  • 使用 paper.setup() 手动创建项目
  • 没有数学运算符 (+ - * / %)
  • ... (More info in the docs)

——

创建一条线、记录其边界框大小(并导出 SVG)的简单示例:

注意:我在当前的 Node LTS (v14.16.1) 中使用了它

package.json

{
  "name": "paper-jsdom-example",
  "main": "index.js",
  "dependencies": {
    "paper-jsdom": "^0.12.15"
  }
}

index.js

const paper = require('paper');
const fs = require('fs');

var size = new paper.Size(300, 300)
paper.setup(size);

var path = new paper.Path();
path.strokeColor = '#348BF0';

var start = new paper.Point(100, 100);
var end = new paper.Point(200, 200);

path.moveTo(start);
path.lineTo(end);

console.log('width', path.bounds.width, 'height', path.bounds.height);

var svg = paper.project.exportSVG({asString:true});
fs.writeFileSync('punchline.svg', svg);