2011-05-01 3 views
1

Est-ce que quelqu'un a de l'expérience avec l'une de ces bibliothèques node.js ou les deux? Curieux d'entendre le succès ou les difficultés avec chacun.node-o3-canvas vs. node-canvas?

+1

Il existe à la fois des auteurs réputés. Il semble que 'node-canvas' a eu des commits plus récents et cela le rendra plus probable dans le futur avec les nouvelles versions de node.js – Raynos

Répondre

3

LearnBoost est l'un des développeurs de modules de nœuds les plus prolifiques de la communauté et pour cette raison je suis allé avec node-canvas sur node-o3-canvas. J'ai utilisé node-canvas pour découper une image en carreaux sur le serveur et les renvoyer au client. Tout fonctionne comme vous l'attendriez. Voici un exemple du genre de code que vous pouvez écrire:

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));   
    } 
} 

Les seuls gotchas je FURENT:

  • Si vous utilisez les méthodes de Async nœud toile, vous devez être prudent allouer de nouvelles instances de canvas/context pour ne pas en interrompre une qui pourrait écrire/dessiner.
  • Pour une raison quelconque, je n'ai jamais pu obtenir l'objet Image() de node-canvas pour fonctionner correctement lors de l'utilisation d'images codées en base64 côté serveur. Mon problème était que l'événement onLoad ne se déclenche pas lorsque la propriété src a été affectée à une chaîne base64. Je n'ai pas passé trop de temps à lutter contre cela, et plutôt écrit les images sur des fichiers temporaires pour contourner le problème.
+0

Il est aussi basé sur Cairo, qui est un PITA pour traiter les non-VPS/Serveurs possédés. – Alan

+0

Avez-vous de la chance d'installer Cairo sur un non-VPS? Je regarde Heroku en ce moment mais je ne veux pas perdre mon temps si ce n'est pas possible. Je ne veux vraiment pas rouler le mien si possible. – Chris

+0

Il y a un [buildpack Heroku pour Cairo] (https://github.com/mojodna/heroku-buildpack-cairo). Je ne l'ai pas personnellement utilisé, donc je ne peux pas encore dire si ça marche ou pas. – Brandon