2017-03-16 42 views
0

我想從imageuri有效的base64字符串base64。我爲此使用了下面的代碼,但是在將代碼上傳到服務器後會出現黑色圖像。Phonegap |將imageuri轉換爲base64 |上傳到服務器後使用jQuery獲取黑色圖像

function encodeImageUri(imageUri) 
{ 
    var c=document.createElement('canvas'); 
    var ctx=c.getContext("2d"); 
    var img=new Image(); 
    img.onload = function(){ 
     c.width=this.width; 
     c.height=this.height; 
     ctx.drawImage(img, 0,0); 
    }; 
    img.src=imageUri; 
    var dataURL = c.toDataURL("image/jpeg"); 
    return dataURL; 
} 

我也試過其他選項,但沒有得到可靠的解決方案來獲得有效的base64 imagedata。我不想使用文件傳輸方法上傳圖像。我想用簡單的base64字符串轉換imageuri。請建議我具體答案相同。

謝謝

+0

在將內容轉儲到服務器端的映像之前,需要先刪除**和**之前的任何內容。我認爲你錯過了。 參考: http://stackoverflow.com/questions/15153776/convert-base64-string-to-an-image-file 雖然PHP,但會給出一個體面的想法 –

+0

它正確地工作getPicture方法與navigator.camera .DestinationType.DATA_URL,但我無法將圖像uri轉換爲base64字符串。 – Pankaj

回答

0

請注意,我沒有在PhoneGap中測試過它。

有可能你被異步加載的圖像抓住了;在它實際加載並完全處理之前,它將它編碼爲一個字符串。

有多種處理方法;一種可能性是遷移到使用success()方法來處理的返回值,一旦圖像加載,這將被調用,並已得出:

function encodeImageUri(imageUri, success) 
{ 
    var c=document.createElement('canvas'); 
    var ctx=c.getContext("2d"); 
    var img=new Image(); 
    img.onload = function(){ 
     c.width=this.width; 
     c.height=this.height; 
     ctx.drawImage(img, 0,0); 
     success(c.toDataURL("image/jpeg"));  
    }; 

    img.src=imageUri; 
} 

然後,您將需要調用encodeImageUri與將處理功能最終的結果,例如:

encodeImageUri(" <url> ", function (data) { 
    console.log(data); 
}); 

根據不同的安全模型PhoneGap的使用,你可能看出來的CORS相關的問題(見Tainted canvases may not be exported)。

+0

請注意,這不是一個完美的解決方案 - 例如,理想情況下,您也可以在此處設置錯誤處理程序。 –

相關問題