Effacez la toile et économisez la toile

Je suis en train de terminer l'application Web pour l'analyse de l'image et la peinture. Et j'ai besoin d'aide avec une toile. C'est ce que je fais:

MODIFIER:

<img id="imgEdit" src="<?php echo $imagename; ?>" border="0"> <canvas id="canvasPaint" width="<?php echo $width; ?>" height="<?php echo $height; ?>"> </canvas> <input type="button" value="Clear" onClick="clearCanvas();" class="button"> <input type="button" value="Save" onClick="saveViaAJAX();" class="button"> <div id="debugFilenameConsole">Wait for a while after clicking the button and the filename of the image will be shown to you. </div> 

Mais maintenant j'ai un problème avec la fonction clearCanvas. Parce que les navigateurs ne peuvent pas lire la "largeur" ​​de la propriété. C'est mon code source complet. Comment, s'il vous plaît, quelqu'un peut-il dire à moi ce que je fais mal.

MODIFIER:

 function clearCanvas() { var theCanvas = document.getElementById("canvasPaint"); if (theCanvas && theCanvas.getContext) { var ctx = theCanvas.getContext("2d"); if (ctx) { ctx.clearRect(0, 0, <?php echo $width; ?>, <?php echo $height; ?>); var srcImg = document.getElementById("imgEdit"); ctx.drawImage(srcImg, 0,0); clickX = new Array(); clickY = new Array(); clickDrag = new Array(); }}} function saveViaAJAX() { var theCanvas = document.getElementById("canvasPaint"); var canvasData = theCanvas.toDataURL("image/jpg"); var postData = "canvasData="+canvasData; var ajax = new XMLHttpRequest(); ajax.open("POST",'canvasSave.php',true); ajax.setRequestHeader('Content-Type', 'canvas/upload'); ajax.send(postData); } 

J'ai besoin d'enregistrer la toile comme image jpeg sur le disque local après l'utilisateur, cliquez sur 'Enregistrer l'image'. C'est méchant, les zones transparentes en toile deviennent des fond noir.

J'ai besoin de quelque chose comme ça: http://i48.tinypic.com/2w5vhpv.jpg

Vous pouvez sauvegarder la toile sur un fichier image avec canvas.toDataUrl('image/jpg') .

En ce qui concerne la première question: normalement, vous effacez la toile avec la méthode context.clearRect(0, 0, canvas.width, canvas.height) . Cela étant dit, votre code devrait fonctionner comme prévu si la toile et les déclarations de contexte ont été effectuées correctement.