node-o3-canvas与node-canvas?

时间:2011-05-01 08:54:18

标签: canvas node.js

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

1 个答案:

答案 0 :(得分:3)

LearnBoost是社区中最多产的节点模块开发人员之一,因此我使用node-canvas over 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));        
    }
}

我遇到的唯一问题是:

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