-2

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

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

4

2 回答 2

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>
于 2012-11-11T06:05:31.453 回答
0

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

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

这可能是一种笨拙的方法,但至少它可以工作,并且不允许我根据一些合法的事情发布代码 ma bob。

在客户端:

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

在服务器上:

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

于 2012-11-11T14:21:04.173 回答