Javascript Phonegap |将imageuri转换为base64 |使用jquery将其上传到服务器后获取黑色图像

Javascript Phonegap |将imageuri转换为base64 |使用jquery将其上传到服务器后获取黑色图像,javascript,jquery,cordova,phonegap-build,phonegap-cli,Javascript,Jquery,Cordova,Phonegap Build,Phonegap Cli,我需要来自imageuri的base64有效字符串。我使用了下面的代码,但上传到服务器后会出现黑色图像 function encodeImageUri(imageUri) { var c=document.createElement('canvas'); var ctx=c.getContext("2d"); var img=new Image(); img.onload = function(){ c.width=this.width;

我需要来自
imageuri
的base64有效字符串。我使用了下面的代码,但上传到服务器后会出现黑色图像

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;
}
我还尝试了其他选项,但没有获得solid solution来获取有效的base64 imagedata。我不想使用文件传输方法上载图像。我想将
imageuri
转换为简单的base64字符串。请给我具体的答案


谢谢

请注意,我没有在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);
});
encodeImageUri(“”,函数(数据){
控制台日志(数据);
});

根据PhoneGap使用的安全模型,您可能必须注意与CORS相关的问题(请参阅)

在将内容转储到服务器端的映像之前,您需要删除任何内容。我想你错过了。参考:虽然PHP提供了一个不错的想法,但AIT在使用navigator.camera.DestinationType.DATA_URL的getPicture方法时工作正常,但我无法将图像uri转换为base64字符串。请注意,这决不是一个完美的解决方案-例如,理想情况下,这里也会有一个错误处理程序。