【问题标题】:Phonegap encode image base64Phonegap 编码图像 base64
【发布时间】:2012-12-26 11:57:59
【问题描述】:

我正在尝试将图像编码为 base64 并将其发送到服务器。当我检索图像时,它显示的是空白。

我用来编码的代码是这样的:

encodeImageUri = function(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.slice(22, dataURL.length);
    }

取自:Using PhoneGap, How to get base64 image data of the photo chosen from photo library in iPhone

【问题讨论】:

    标签: javascript image cordova base64


    【解决方案1】:

    我使用以下代码将图像转换为 Base64:

    var Base64 = {
        /**
         * This implementation relies on Cordova 1.5 or above implementations.
         */
        getBase64ImageFromInput : function (input, callback) {
            var imageReader = new FileReader();
            imageReader.onloadend = function (evt) {
                if (callback)
                    callback(evt.target.result);
            };
            //Start the asynchronous data read.
            imageReader.readAsDataURL(input);
        },
        formatImageSrcString : function (base64) {
            return (base64.match(/(base64)/))? base64 : "data:image/jpeg;base64," + base64;
        } 
    };
    

    以下是使用此对象将图像从文件输入转换为 base64 编码的示例:

    var fileInput = document.createElement('input');
    fileInput.type = 'file';
    fileInput.onchange = function () {
        var input = this.files[0];
        if (input) {
            Base64.getBase64ImageFromInput(input, function (imageData) {
                //Process the image string. 
                console.log(imageData);
            });
        } else {
           alert("Please select an image.");
        }
    };
    

    希望这会有所帮助。如果您有任何问题,请告诉我。

    【讨论】:

      【解决方案2】:

      使用FileReaderreadAsDataURL方法。

      【讨论】:

      • 如果没有关于创建 FileEntry 对象实例的文档,如何使用 readAsDataUrl?
      • 获取 imageURI 并将其传递给 window.resloveLocalFileSystemURI ,它将有一个 FileEntry 对象作为成功回调的参数。然后您就可以使用 FileReader 读取该 FileEntry。
      • 我知道 resloveLocalFileSystemURI 是未定义的
      • 那是因为我不能打字 ;) 它应该是窗口。 resolveLocalFileSystemURI().
      【解决方案3】:

      图像正在异步加载,这意味着您的return dataURL... 发生在之前图像被加载到画布中。

      不要让这个函数返回一个值,而是让它调用一个回调函数。

      encodeImageUri = function(imageUri, callback) {
          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);
      
              if(typeof callback === 'function'){
                  var dataURL = c.toDataURL("image/jpeg");
                  callback(dataURL.slice(22, dataURL.length));
              }
          };
          img.src = imageUri;
      }
      

      你现在这样称呼它:

      encodeImageUri('/path/to/image.png', function(base64){
          // Do something with the b64'd image
      });
      

      注意:为此,图片需要与您的页面位于同一域中。

      【讨论】:

      • @danielrvt-sgb:图片与您的页面在同一个域中吗?你确定那个字符串是错误的吗?
      • 图片是用手机摄像头拍摄的,存储在sdcard中。我测试了这个页面中的字符串:freeformatter.com/base64-encoder.html 并返回一个空白图像
      • 我对phonegap一无所知,但我知道浏览器不喜欢您尝试将文件系统中的文件加载到页面中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 2018-02-28
      相关资源
      最近更新 更多