将HTML5画布图像保存到服务器

时间:2012-11-11 06:02:03

标签: javascript html5

我需要将带有id ='area'的画布数据作为图像保存到我的服务器中,使用javascript保存在文件夹/上传中。

我尝试使用window.open(canvas.toDataURL(“image / png”))在浏览器中显示图像;但浏览器显示空白屏幕

2 个答案:

答案 0 :(得分:1)

您可以使用toDataURL()

注意:toDataURL()方法要求绘制到画布上的任何图像都托管在Web服务器上,该域服务器与执行它的代码具有相同的域。如果不满足此条件,则抛出SECURITY_ERR异常。

例如

 <body>
    <canvas id="myCanvas" width="578" height="200" style="display:none;"></canvas>
    <img id="canvasImg" style="border:1px solid #9C9898;" alt="Right click to save me!">
    <script>
      var canvas = document.getElementById('myCanvas');
      var context = canvas.getContext('2d');

      // draw cloud
      context.beginPath();
      context.moveTo(170, 80);
      context.bezierCurveTo(130, 100, 130, 150, 230, 150);
      context.bezierCurveTo(250, 180, 320, 180, 340, 150);
      context.bezierCurveTo(420, 150, 420, 120, 390, 100);
      context.bezierCurveTo(430, 40, 370, 30, 340, 50);
      context.bezierCurveTo(320, 5, 250, 20, 250, 50);
      context.bezierCurveTo(200, 5, 150, 20, 170, 80);
      context.closePath();
      context.lineWidth = 5;
      context.fillStyle = '#8ED6FF';
      context.fill();
      context.strokeStyle = '#0000ff';
      context.stroke();

      // save canvas image as data url (png format by default)
      var dataURL = canvas.toDataURL();

      // set canvasImg image src to dataURL
      // so it can be saved as an image
      document.getElementById('canvasImg').src = dataURL;

    </script>
  </body>

答案 1 :(得分:0)

我实际上是在我早期的一个项目中解决了这个问题。

用户/服务器之间的安全性和这种方法绕过它,因为我遇到了另一个答案中提到的可能问题。

这可能是一种笨拙的方式,但至少它可行,并且我不允许发布基于某些合法的东西的代码。

在客户端:

您可以做的是让用户单击按钮激活异步回发然后在回发运行之前将您的画布内容转换为您选择的格式的图像,然后将其转换为base64字符串并放置它在一个隐藏的文本框上,将文本框的内容发送到您的服务器,就像您使用常规注册表一样。

在服务器上:

将新获取的base64字符串转换回与客户端创建的格式相同的图片,然后保存。