用一張空白的畫布開始:HTML5畫布toDataURL返回空白圖像
<canvas id='myCanvas' width='800' height='600'></canvas>
然後初始化是帆布:
function init_canvas(){
var canvas = document.getElementById('myCanvas');
context = canvas.getContext('2d');
context.lineCap = 'round';
// fill it with white background
context.save();
context.fillStyle = '#fff';
context.fillRect(0, 0, context.canvas.width, context.canvas.height);
context.restore();
return;
}
然後做了一堆畫布上繪畫。
然後嘗試在後端使用ajax和PHP將其保存到服務器。
在客戶端:
var img = canvas.toDataURL('image/png');
// strip the leading garbage.
img.substr(img.indexOf(',')+1).toString();
拿得到的字符串,這是base64編碼的PNG,直接把PHP和和BASE64_DECODE()字符串...圖像始終是正確的大小,但它有沒有繪製它 - 只是一個透明的圖像。這在PHP中似乎不是base64_decode()的問題,它似乎是一個安全問題或其他問題。它在Firefox 4和最新的Chrome中均失敗。
所產生的PNG圖像轉儲到火狐「圖像/ PNG」頭產生這個錯誤控制檯:
Error: Image corrupt or truncated: http://somewhere.com/showimage.php
Source file: http://somewhere.com/showimage.php
但是...圖像不損壞或截斷,我可以看出,除非toDataURL ()隨處可見,因爲php的東西只是base64_decode()toDataURL()的結果。
任何想法?
謝謝!
你可能想看看這個例子的來源。 http://motyarblog.000space.com/imagetouri.php使用jquery。你的問題我的謊言實際上'canvas.toDataURL'是圖像的base64字符串,如果它超過了255個字符而不能作爲$ _GET傳遞 –
已經想到了這一點,並確認我正在執行POST操作XHR。在後端,我將base64編碼的圖像轉儲爲文本文件,長度沒問題,它是一個真正的b64字符串,沒有編碼,只是一個空白圖像。 – Erick
你見過[this comment](http://www.php.net/manual/en/function.base64-decode.php#104193)在'base64_decode'的PHP文檔中嗎? – robertc