2017-03-16 19 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

请注意,这不是一个完美的解决方案 - 例如,理想情况下,您也可以在此处设置错误处理程序。 –

相关问题