2017-09-27 1 views
0

En essayant d'implémenter une fonctionnalité sur une plateforme hébergée, ne permet pas PHP. Seul JS & HTML. Et je suis coincé!Enregistrer canvas sur le serveur avec node.js (ou alternative)

J'ai construit cette toile qui permet à votre dessiner et puis enregistrez via document.getElementById("canvasimg")

Je veux que l'image à enregistrer en quelque sorte sur le serveur et réimprègnent appelé quand une nouvelle visite de l'utilisateur, afin qu'ils voir ce a été enregistré pour la dernière fois sur la toile.

Je pensais avoir un fichier hébergé sur-écrit obtenir lorsque l'utilisateur enregistre une nouvelle version de la toile. Alors cette image peut être appelée dans la toile comme image de fond pour permettre à la prochaine personne de continuer à dessiner dessus?

Voici mon code:

<html> 
 
    <script type="text/javascript"> 
 
    var canvas, ctx, flag = false, 
 
     prevX = 0, 
 
     currX = 0, 
 
     prevY = 0, 
 
     currY = 0, 
 
     dot_flag = false; 
 

 
    var x = "black", 
 
     y = 2; 
 

 
    function init() { 
 
     canvas = document.getElementById('can'); 
 
     ctx = canvas.getContext("2d"); 
 
     w = canvas.width; 
 
     h = canvas.height; 
 

 
     canvas.addEventListener("mousemove", function (e) { 
 
      findxy('move', e) 
 
     }, false); 
 
     canvas.addEventListener("mousedown", function (e) { 
 
      findxy('down', e) 
 
     }, false); 
 
     canvas.addEventListener("mouseup", function (e) { 
 
      findxy('up', e) 
 
     }, false); 
 
     canvas.addEventListener("mouseout", function (e) { 
 
      findxy('out', e) 
 
     }, false); 
 
    } 
 

 
    function color(obj) { 
 
     switch (obj.id) { 
 
      case "black": 
 
       x = "black"; 
 
       break; 
 
      case "white": 
 
       x = "white"; 
 
       break; 
 
     } 
 
     if (x == "white") y = 14; 
 
     else y = 2; 
 

 
    } 
 

 
    function draw() { 
 
     ctx.beginPath(); 
 
     ctx.moveTo(prevX, prevY); 
 
     ctx.lineTo(currX, currY); 
 
     ctx.strokeStyle = x; 
 
     ctx.lineWidth = y; 
 
     ctx.stroke(); 
 
     ctx.closePath(); 
 
    } 
 

 
    function erase() { 
 
     var m = confirm("Want to clear"); 
 
     if (m) { 
 
      ctx.clearRect(0, 0, w, h); 
 
      document.getElementById("canvasimg").style.display = "none"; 
 
     } 
 
    } 
 

 
    function save() { 
 
     document.getElementById("canvasimg").style.border = "2px solid"; 
 
     var dataURL = canvas.toDataURL(); 
 
     document.getElementById("canvasimg").src = dataURL; 
 
     document.getElementById("canvasimg").style.display = "inline"; 
 
    } 
 

 
    function findxy(res, e) { 
 
     if (res == 'down') { 
 
      prevX = currX; 
 
      prevY = currY; 
 
      currX = e.clientX - canvas.offsetLeft; 
 
      currY = e.clientY - canvas.offsetTop; 
 

 
      flag = true; 
 
      dot_flag = true; 
 
      if (dot_flag) { 
 
       ctx.beginPath(); 
 
       ctx.fillStyle = x; 
 
       ctx.fillRect(currX, currY, 2, 2); 
 
       ctx.closePath(); 
 
       dot_flag = false; 
 
      } 
 
     } 
 
     if (res == 'up' || res == "out") { 
 
      flag = false; 
 
     } 
 
     if (res == 'move') { 
 
      if (flag) { 
 
       prevX = currX; 
 
       prevY = currY; 
 
       currX = e.clientX - canvas.offsetLeft; 
 
       currY = e.clientY - canvas.offsetTop; 
 
       draw(); 
 
      } 
 
     } 
 
    } 
 
    </script> 
 
    <body onload="init()"> 
 
     <canvas id="can" width="500px" height="675px" style="position:absolute;border:2px solid;background:url(http://files.cargocollective.com/715286/sticker.jpg);background-size:100%100%;"></canvas> 
 
     <div style="position:relative;top:40px;left:600px;">Eraser</div> 
 
     <div style="position:relative;top:50px;left:600px;width:15px;height:15px;background:white;border:2px solid;" id="white" onclick="color(this)"></div> 
 
     <div style="position:relative;top:100px;left:600px;width:15px;height:15px;background:black;border:2px solid;" id="black" onclick="color(this)"></div> 
 
     <div style="position:relative;top:50px;left:600px;">Pen</div> 
 
     <img id="canvasimg" style="position:relative;top:10%;left:600px;" style="display:none;"> 
 
     <input type="button" value="save" id="btn" size="30" onclick="save()" style="position:relative;top:150px;left:594px;"> 
 
     <input type="button" value="clear" id="clr" size="23" onclick="erase()" style="position:relative;top:180px;left:550px;"> 
 
    </body> 
 
    </html>

Répondre

0

Vous ne pouvez pas.

Si vous ne pouvez pas modifier le serveur (par exemple PHP), vous ne serez certainement pas en mesure d'utiliser NodeJS. La seule chose que vous pouvez faire est de sauvegarder le canevas à localStorage ou sessionStorage mais ceux-ci sont temporaires.