2012-04-23 132 views
3

總結:說我畫一個白色的笑臉在瀏覽器中的canvas元素。當我在Safari中通過js/ajax(與toDataUrl('image/png'))從此畫布生成POST服務器到PHP服務器的圖像字符串時,使用PHP函數imagecreatefromstring()和imagepng()在服務器上創建的圖像是正確的高度和寬度,但它全是白色的,而不是瀏覽器畫布上的笑臉。.toDataURL()從Safari瀏覽器PHP是呈現全白圖像(未畫出區)

我剝去「數據:圖像/ PNG; BASE64,」 base64_decoding並保存爲圖像文件之前從字符串。

此方法在FF和Chrome中完美工作。

編碼的字符串,toDataUrl在JS生成的基於64被驗證爲服務器已接收到相同的字符串,因此它沒有得到在轉印切斷。

當我從toDataUrl()將圖像字符串加載到任何瀏覽器時,它會按預期顯示繪製的圖像。但是,服務器上生成的newimage.png完全是白色的。

有不同的東西,Safari瀏覽器也進行編碼的圖像轉換爲需要被佔服務器上的base64字符串?如果是這樣,它不能太過於激烈,因爲任何瀏覽器都能夠從圖像字符串中呈現正確的笑臉。

請隨時讓我知道如果你需要更多的信息。

預先感謝您!

編輯: 可以將它涉及到如何野生動物園店透明度?

+0

您如何發佈由Safari和FF的'toDataUrl'生成的字符串,以便我們可以看到有什麼不同? – 2012-04-23 19:29:51

回答

1

您是否嘗試導出沒有透明度的圖像?在調用toDataURL之前,可以考慮用純色填充背景。

var ctx = document.getElementById('my_canvas').getContext('2d'); 
var w = $("#my_canvas").width(); 
var h = $("#my_canvas").height(); 
ctx.globalCompositeOperation = 'lighter'; 
ctx.fillStyle = "#000"; 
ctx.fillRect(0, 0, w, h); 

像這樣的東西應該產生更一致的結果。

+0

這是值得一拍 – 2012-04-23 19:30:11

+0

這完美的工作!對於FF,Chrome和Safari完全相同的(空白)蒙版,字符串是不同的,所以它們絕對都以不同的方式進行編碼。但填補透明區域的伎倆。謝謝! – 2012-04-24 13:59:46

相關問題