【问题标题】:node-o3-canvas vs. node-canvas?node-o3-canvas 与 node-canvas?
【发布时间】:2011-08-16 09:20:54
【问题描述】:

有没有人使用过这些 node.js 库中的一个或两个?很想知道每个人的成功或困难。

【问题讨论】:

  • 都来自著名的作者。 node-canvas 似乎有更多最近的提交,这使得它更有可能在未来使用更新版本的 node.js 进行维护

标签: canvas node.js


【解决方案1】:

LearnBoost 是社区中最多产的节点模块开发人员之一,因此我选择了 node-canvas 而不是 node-o3-canvas。

我使用 node-canvas 在服务器上将图像分割成图块并将它们发送回客户端。一切都如您所愿。以下是您可能编写的代码示例:

helper = function(x, y, canvas) {
    return function(err, str) {
        if (!tiles[x]) {
            tiles[x] = [];
        }

        tiles[x][y] = { 
            data: str
            , buffer: canvas.toBuffer()
            , covered: true 
        };
    };
};  

for (y = 0; y < tilesPerColumn; y += 1) {
    for (x = 0; x < tilesPerRow; x += 1) {
        //Create a new tile canvas each time so they don't run over each other
        tCanvas = new Canvas(chunkSize, chunkSize);
        tCtx = tCanvas.getContext('2d');

        xOffSet = chunkSize * x;
        yOffSet = chunkSize * y;

        //Save a set of uncovered tiles to store in memory
        tCtx.drawImage(img, xOffSet, yOffSet, chunkSize, chunkSize, 0, 0, chunkSize, chunkSize);
        tCanvas.toDataURL(helper(x, y, tCanvas));        
    }
}

我唯一遇到的问题是:

  • 如果您在节点画布中使用异步方法,则需要小心分配新的画布/上下文实例,以免中断可能正在书写/绘图的实例。
  • 由于某种原因,在使用服务器端 base64 编码图像时,我无法让 node-canvas 的 Image() 对象正常工作。我的问题是当为 src 属性分配 base64 字符串时不会触发 onLoad 事件。我没有花太多时间解决这个问题,而是将图像写入临时文件以解决问题。

【讨论】:

  • 它也是基于 Cairo 的,这是一个在非 VPS/Owned 服务器上处理的 PITA。
  • 在非 VPS 上安装 Cairo 有什么好运气?我现在正在看 Heroku,但如果不可能的话,我不想浪费我的时间。如果可能的话,我真的不想自己动手。
  • 有一个Heroku buildpack for Cairo。我没有亲自使用过,所以我还不能说它是否有效。
  • @jslatts "如果你在 node-canvas 中使用异步方法" 你的意思是你可以使用 node canvas 异步绘制吗?在文档中找不到任何内容
猜你喜欢
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-05
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-08
相关资源
最近更新 更多