2011-05-01 68 views
1

有沒有人有這些node.js庫中的任何一個或兩者的經驗?好奇聽到每個人的成功或困難。node-o3-canvas與node-canvas?

+1

這兩個來自知名作者。看起來'node-canvas'已經有了更多的提交,並且使得它更有可能在將來用更新版本的node.js – Raynos 2011-05-01 09:01:54

回答

3

LearnBoost是社區中最豐富的節點模塊開發人員之一,因此我在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事件不會觸發。我並沒有花費太多時間來處理這個問題,而是將圖像寫入臨時文件以解決問題。
+0

進行維護。此外,它基於開羅,這是一個PITA來處理非VPS /擁有的服務器。 – Alan 2013-08-09 07:23:08

+0

運氣得到開羅安裝在非VPS?我現在正在看Heroku,但不想浪費我的時間,如果這是不可能的。如果可能,我真的不想推出自己的產品。 – Chris 2014-01-28 02:43:30

+0

還有[開羅的Heroku buildpack](https://github.com/mojodna/heroku-buildpack-cairo)。我沒有親自使用它,所以我還不能說它是否有效。 – Brandon 2014-03-27 03:48:01