キャンバスがあり、ajax と php を使用してキャンバス コンテキストをサーバーにアップロードしたいと考えています。最終出力をサーバーに保存された画像にしたい。フォームを使用して画像をアップロードしました。しかし今、キャンバスコンテキストを取得して画像に変換し、サーバーにアップロードしたいと思います!
それで、どうすればそれを行うことができますか?提案、アルゴリズム、または解決策は大歓迎です!
キャンバスがあり、ajax と php を使用してキャンバス コンテキストをサーバーにアップロードしたいと考えています。最終出力をサーバーに保存された画像にしたい。フォームを使用して画像をアップロードしました。しかし今、キャンバスコンテキストを取得して画像に変換し、サーバーにアップロードしたいと思います!
それで、どうすればそれを行うことができますか?提案、アルゴリズム、または解決策は大歓迎です!
このブログ投稿では、AJAX クエリを使用してキャンバスをサーバーに保存する方法を適切に説明しています。
var canvasData = testCanvas.toDataURL("image/png");
基本的に、 JavaScript でキャンバスのコンテンツを取得するには が必要です。これは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 スクリプトではHTTP_RAW_POST_DATA
、$GLOBALS
配列に指定されたキーがあり、これにはフェッチしたばかりのデータが含まれます。
// 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
保存するファイル名です。data:image/png;base64,
最初の行は、後で でデコードできるように、エンコードされたイメージの一部を削除するために必要ですbase64_decode()
。その出力 ( $decodedData
) がファイルに保存されます。