node-canvas在Node中工作,但在PhantomJS需要时失败

时间:2017-05-01 21:41:28

标签: javascript node.js canvas phantomjs node-gyp

我有一个PhantomJS应用程序,我想从JS驱动的页面(通过page.renderBase64('PNG'))获取一系列屏幕截图,然后将这些屏幕截图拼接成GIF。

据我所知,Node中没有办法用纯粹的base64字符串构建GIF,我真的不想把每个帧都写到磁盘上,然后去Node外面用ImageMagick将它们拼接在一起或者类似的东西 - 这会大大减缓这个过程。所以我的计划是将base64图像绘制到画布上,然后将画布添加到Node GIF生成器。

虽然我可以在Node环境中使用node-canvas没有问题,但当我在我的Phantom脚本中包含require('canvas')时,当我启动一个新的Canvas对象时,它会失败,从而吐出一个看到的常见错误缺少依赖项时:

Error: Cannot find module './lib/node-canvas/build/Release/canvas'

  phantomjs://platform/bootstrap.js:299 in require
  phantomjs://platform/bootstrap.js:263 in require

我认为,部分问题是Phantom是从不存在所有依赖项的不同环境运行Node。但我不太明白Node和PhantomJS在执行Javascript方面有何不同。我不清楚phantomjs://platform/bootstrap.js是什么,或者是否可以扩展。

要清楚,我正在使用Phantom-Node桥,我用var page = require('webpage').create();开始编写脚本。然后,我从命令行使用phantomjs执行脚本。

TL; DR:要求PhantomJS脚本中的基于C ++的节点模块node-canvas失败,从Node运行时不会失败。环境如何不同?为什么有些Node模块可以工作而其他模块不工作?

更新:我知道我可以在Phantom正在呈现的页面上创建一个<canvas>元素并使用它,但这需要耗费大量时间在页面的沙盒JS和脚本本身之间来回。

0 个答案:

没有答案