Javascript 将摄像头捕获图像转换为base64-Ionic

Javascript 将摄像头捕获图像转换为base64-Ionic,javascript,cordova,camera,ionic-framework,base64,Javascript,Cordova,Camera,Ionic Framework,Base64,我已经按照这个fiddler示例图像到Base64。当我使用“直接图像路径”链接时,它工作正常,但当我传递相机图像时,它失败了 Camera.getPicture().then(function(imageURI) { var imageUrl = "http://upload.wikimedia.org/wikipedia/commons/4/4a/Logo_2013_Google.png"; convertImgToDataURLviaCanvas(imageU

我已经按照这个fiddler示例图像到Base64。当我使用“直接图像路径”链接时,它工作正常,但当我传递相机图像时,它失败了

   Camera.getPicture().then(function(imageURI) {
      var imageUrl = "http://upload.wikimedia.org/wikipedia/commons/4/4a/Logo_2013_Google.png";
      convertImgToDataURLviaCanvas(imageUrl, function(base64Img) {
          alert(base64Img);
      });
      var result = convertImgToDataURLviaCanvas(imageURI);
  }, function(err) {
      alert(err);
  }, {
      quality: 75,
      targetWidth: 320,
      targetHeight: 320,
      pictureSource: navigator.camera.PictureSourceType.PHOTOLIBRARY,
      destinationType: navigator.camera.DestinationType.FILE_URI,
      saveToPhotoAlbum: true
  });



function convertImgToDataURLviaCanvas(url, callback, outputFormat) {
var img = new Image();
img.crossOrigin = 'Anonymous';
img.onload = function() {
    var canvas = document.createElement('CANVAS');
    var ctx = canvas.getContext('2d');
    var dataURL;
    canvas.height = this.height;
    canvas.width = this.width;
    ctx.drawImage(this, 0, 0);
    dataURL = canvas.toDataURL(outputFormat);
    alert(dataURL + "GANESH" + outputFormat);
    callback(dataURL);
    alert('5');
    canvas = null;
};
img.src = url;
}


在这里,如果我给图像的直接路径,它工作,但它不工作,当我使用相机图像。帮帮我,伙计们。。提前感谢。

无需编写自己的base64转换器。一旦您设置属性
Camera.DestinationType.DATA\u URL

destinationType : Camera.DestinationType.DATA_URL
设置属性后,
Camera.getPicture()
现在将返回照片的
base64
版本

Camera.getPicture().then(function(imageURI) {
  console.log(imageURI) //base64 photo
});

虽然我同意使用数据URL是最简单的答案,但它确实有一个主要缺点。爱奥尼亚相机所基于的:

数据URL可能占用大量内存,导致应用程序崩溃或内存不足错误。如果可能,请使用文件URI或本机URI

基本上,在RAM较低(或后台内存使用率较高)的手机上,您的应用程序有可能在垃圾收集过程中被杀死并重新启动,因为当本机摄像头打开时,从技术上讲,它处于后台(暂停)

然而,避免使用数据URL更是一个难题,因为其他数据源仍然容易受到相同问题的影响,尽管由于内存使用率较低,这种影响较小。关于Android生命周期的cordova文档提供了有关该问题的更多详细信息:

问题(可能)在于线路:

img.crossOrigin = 'Anonymous';
说明方法
toDataUrl()
在“受污染的画布”上不起作用。当您将
crossOrigin
设置为“匿名”时,画布会受到污染


我还没有测试过这个理论。读吧

谢谢你的回复。所以我不想使用ConvertImgTodaTauralViacanvas函数?@ganesh是的,确实如此,这样做没有意义,因为当且仅当您设置destinationType:Camera.destinationType.DATA\Url时,摄像头插件将为您返回base64字符串。您知道如何将数据\u Url转换为文件吗?因为我想和你一起寄XMLHttpRequest@MissakBoyajian使用
Camera.DestinationType.FILE_URI
Camera.DestinationType.NATIVE_URI