問題なく DOM にペイントでき、ユーザーがローカルで使用できるように保存できるキャンバスがあります。
storCanvas.toBlob(function(blob) { saveAs(blob, name + ".png");});
(注: http://eligrey.com/blog/post/ Saving-generated-files-on-the-client-side から、クロスプラットフォームのサポートのために canvas-toBlob.js を含めました)
今、私がやりたいのは、同じキャンバス要素をサーバーに送信することです。私は次のようなことができると思いました:
storCanvas.toBlob(function(blob) {upload(blob);});
どこにアップロード(ブロブ); は:
function upload(blobOrFile)
{
var xhr = new XMLHttpRequest();
xhr.open('POST', 'upload_file.php', true);
xhr.onload = function(e) { /*uploaded*/ };
// Listen to the upload progress.
var progressBar = document.querySelector('progress');
xhr.upload.onprogress = function(e) {
if (e.lengthComputable)
{
progressBar.value = (e.loaded / e.total) * 100;
progressBar.textContent = progressBar.value;
}
};
xhr.send(blobOrFile);
}
(引用: http://www.html5rocks.com/en/tutorials/file/xhr2/ )
今、私はこれがうまくいくと思っていましたが、私の PHP ページ (標準の HTML フォームを使用して POST を正常に実行できます) は、0kB の無効なファイルを取得したことを (firebug を介して) 報告します。問題はブロブへの変換にあると思いますが、正しい方法がわかりません...