我有一個畫布,我想使用ajax和php上傳canvas上下文到服務器。我希望最終輸出成爲存儲在服務器上的映像。我已經使用表單完成了圖片上傳。但現在我想讓canvas上下文將其轉換爲圖像並上傳到服務器!使用ajax和php上傳canvas上下文作爲圖像
那麼,我該怎麼做呢?任何建議,算法或解決方案,表示讚賞!
我有一個畫布,我想使用ajax和php上傳canvas上下文到服務器。我希望最終輸出成爲存儲在服務器上的映像。我已經使用表單完成了圖片上傳。但現在我想讓canvas上下文將其轉換爲圖像並上傳到服務器!使用ajax和php上傳canvas上下文作爲圖像
那麼,我該怎麼做呢?任何建議,算法或解決方案,表示讚賞!
This blog post恰當地描述了使用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腳本,你將有一個在$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
是您要保存的文件名。第一行需要刪除編碼圖像的data:image/png;base64,
部分,以便稍後可以通過base64_decode()
進行解碼。它的輸出($decodedData
)將被保存到文件中。
@MJQ ['fopen ()'](http://php.net/manual/en/function.fopen.php)接受它的'filename'參數,也可能是一個文件路徑。所以如果你把'test.png'改成'somefolder/test.png',它會保存到'somefolder'中,文件名爲'test.png'。請注意,此方法將** ALL **文件保存爲'test.png',本質上**覆蓋**前一次保存。 – Whisperity 2012-08-07 10:19:23
我建議'file_get_contents('php:// input')'通過'HTTP_RAW_POST_DATA',IIRC後者並不總是被填充。 – deceze 2012-08-07 10:21:27
感謝您的完美答案! – MJQ 2012-08-07 10:22:41
[將'canvas'圖像數據上傳到服務器]可能的重複(http://stackoverflow.com/questions/1590965/uploading-canvas-image-data-to-the-server) – rsplak 2012-08-07 09:47:13