Je construis un plugin firefox qui permet aux utilisateurs de dessiner n'importe quel personnage arbitraire sur un objet et de le sauvegarder en tant qu'image (fichier png).getDataURL pour une partie de l'objet canvas
var $ = getJQueryOb();
var canvas = '<canvas id="canvas" width="1024" height="1024" style="position:absolute; top:0px; left:0px;"></canvas>';
var currentWindow = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser");
var mainDoc = currentWindow.getBrowser().contentDocument;
var cObj = $(canvas).appendTo(mainDoc.body);
$(cObj).bind('mousemove', handlePenDraw);
En utilisant cela, je peux dessiner sur la toile. Cependant, lorsque je sauvegarde l'image, je ne veux pas que la totalité de la toile soit enregistrée, mais plutôt le "rectangle de délimitation" autour de l'image créée pour être sauvegardée.
Y a-t-il un moyen de le faire? Ce que je fais actuellement va sauver la toile comme il est:
var $ = getJQueryOb();
var canvas = $('#canvas')[0];
var dURL = canvas.toDataURL("image/png");
saveToFile(dURL, "image-file.png");
Wow! Merci beaucoup! getImageData() est la fonction que je cherchais! – Kapil
Votre solution fonctionne bien. Cependant, j'ai une question de suivi. Je remarque que la méthode putImageData() prend un peu plus de temps pour ajouter l'image au canevas. Au lieu de cela, existe-t-il un moyen d'extraire dataURL de l'imageData elle-même? De cette façon, je serais en mesure de réduire le temps pris pour faire l'image. Des idées? Je serais bien construire la chaîne base64 manuellement si c'est permis. – Kapil
Je suppose que vous pourriez essayer de convertir le ImageData dans une chaîne base64, bien que cela puisse prendre plus de temps que d'utiliser putImageData et getDataURL. – Castrohenge