-2

キャンバス データを id='area' で画像としてサーバーのフォルダ /uploads に 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

私は実際に私の以前のプロジェクトでこの問題を解決しました。

ここで別の回答で言及されている可能性のある問題にぶつかったため、ユーザー/サーバー間のセキュリティと、このアプローチはそれをバイパスします。

これは不器用な方法かもしれませんが、少なくとも機能し、合法的なものに基づいてコードを投稿することは許可されていません。

クライアント上:

できることは、ユーザーにボタンをクリックして非同期ポストバックをアクティブにし、ポストバックが実行される前に、キャンバスのコンテンツを選択した形式の画像に変換してから、それをbase64文字列に変換して非表示に配置することです通常の登録フォームと同じように、textbox を開き、テキストボックスの内容をサーバーに送信します。

サーバー上:

新しく取得したbase64文字列を、クライアント側で作成したのと同じ形式の画像に変換して保存します。

于 2012-11-11T14:21:04.173 に答える