2012-08-07 13 views
5

私はキャンバスを持っており、ajaxとphpを使用してキャンバスコンテキストをサーバにアップロードします。私は最終的な出力をサーバーに保存された画像にしたい。私はフォームを使って画像をアップロードしました。しかし今、キャンバス・コンテキストをイメージに変換してサーバーにアップロードする必要があります。ajaxとphpを使用してキャンバスコンテキストを画像としてアップロード

どうすればいいですか?どんな提案、藻類や解決策もありがとう!

+0

[キャンバスの画像データをサーバーにアップロードする]の複製が可能です(http://stackoverflow.com/questions/1590965/uploading-canvas-image-data-to-the-server) – rsplak

答えて

11

This blog post AJAXクエリを使用してキャンバスをサーバーに保存する方法をaptlyで説明していますが、これはあなたに合っているはずです。

基本的には、キャンバスの内容をJavaScriptで取得するにはvar canvasData = testCanvas.toDataURL("image/png");が必要です。これはBase64エンコードされた文字列です。data:image/png;base64,fooooooooooobaaaaaaaaaaar==のようになります。

次のコードは、AJAXのクエリは、HTMLに内容を送信してくださいます

:この意志、

var ajax = new XMLHttpRequest(); 
ajax.open("POST",'testSave.php',false); 
ajax.setRequestHeader('Content-Type', 'application/upload'); 
ajax.send(canvasData); 

サーバーでは、PHPスクリプトで、あなたは$GLOBALS配列にHTTP_RAW_POST_DATAという名前のキーを持っています私たちがちょうどフェッチしたデータを含みます。

// Remove the headers (data:,) part. 
$filteredData=substr($GLOBALS['HTTP_RAW_POST_DATA'], strpos($GLOBALS['HTTP_RAW_POST_DATA'], ",")+1); 

// Need to decode before saving since the data we received is already base64 encoded 
$decodedData=base64_decode($filteredData); 

$fp = fopen('test.png', 'wb'); 
fwrite($fp, $decodedData); 
fclose($fp); 

もちろん、test.pngは保存するファイル名です。最初の行は、base64_decode()で後でデコードすることができるように、符号化された画像の一部分であるdata:image/png;base64,を削除する必要があります。出力($decodedData)がファイルに保存されます。

+1

@MJQ ['fopen () '](http://php.net/manual/en/function.fopen.php)はファイルパスでもある' filename'引数をとります。 'test.png'を' somefolder/test.png'に変更すると 'test.png'というファイル名で' somefolder'に保存されます。この方法は** ALL **ファイルを 'test.png'として保存するので、本質的に**前の保存を上書きする**ように注意してください。 – Whisperity

+1

'HTTP_RAW_POST_DATA'の上に' file_get_contents( 'php:// input') 'を使うことをお勧めします。 – deceze

+0

完璧な答えをありがとう! – MJQ

関連する問題