7

使用PhoneGap(Cordova),我试图从照片库中获取照片的base64图像数据。

我可以这样做..当从相机拍摄照片时,使用 Cordova 中的以下代码片段。

    navigator.camera.getPicture(onSuccess, onFail, { quality: 50,
    destinationType: Camera.DestinationType.DATA_URL
 }); 

function onSuccess(imageData) {
    var image = document.getElementById('myImage');
    image.src = "data:image/jpeg;base64," + imageData;
}

function onFail(message) {
    alert('Failed because: ' + message);
}

但是,当从库中选择照片时,我应该怎么做才能获取 base64 图像数据?

4

6 回答 6

14
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;
}

我在 PhoneGap 中没有解决方案。所以我需要的是用户从他们的照片库中选择的base64格式的图像。所以我把那个图像放在画布上,toDataUrl()给了我非常格式:-)

于 2012-06-28T14:23:03.437 回答
4

你只需要告诉它从照片库中选择:

navigator.camera.getPicture(onSuccess, onFail, { quality: 50,
    destinationType: Camera.DestinationType.DATA_URL,
    sourceType : Camera.PictureSourceType.PHOTOLIBRARY
}); 

请注意,加载大型 base 64 编码图像可能会导致您的应用出现内存不足错误。尽可能使用 FILE_URI 来获取您的照片。

于 2012-06-25T14:16:36.680 回答
2

它是在 base64 中获取图像的好方法,但是何时显示此函数返回的 base64 字符串。它向我显示一个白色图像。我的代码如下

var smallImage = document.getElementById('smallImage');
                smallImage.src = encodeImageUri(imageURI);
于 2012-11-05T11:56:18.397 回答
0

您可以使用此插件为您获取图像的 base64 编码,它使用 iOS 的 js 代码,但在 android 的情况下,它使用本机代码来处理低于 v.3 的 android 版本,因为低于 3 的 android 版本无法处理toDataUrl功能性

于 2014-03-26T10:44:46.177 回答
0

试试这个。

function getPhoto(source) {
    // Retrieve image file location from specified source
    navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50,
        destinationType: destinationType.FILE_URI,
        sourceType: source });
} 

function onPhotoURISuccess(imageURI) {

    window.resolveLocalFileSystemURI(imageURI, gotFileEntry, failSystem);

}
function onFail(message) {
    alert('Failed because: ' + message);
}
var gotFileEntry = function(fileEntry) {
   // alert(fileEntry.fullPath);
    console.log("got image file entry: " +  fileEntry.fullPath);
//convert all file to base64 formats
    fileEntry.file( function(file) {
//uncomment the code if you need to check image size
       //if(file.size>(1049576/2))
      // {
           //alert('File size exceeds 500kb');
          // return false;
      // }
        var reader = new FileReader();
        reader.onloadend = function(evt) {
            console.log("Read complete!");
            $('yourimageidtoshow').attr('src',  evt.target.result);
        };
        reader.readAsDataURL(file);
    }, failFile);
};
var failSystem=function(){
    console.log('failed');

}
var failFile=function(){

    console.log('failed');
    throw "toobig";
};
于 2014-07-04T11:25:20.967 回答
0

试试这个:https ://github.com/brianvandelden/acato-service-image 。它使用 imagePicker.git cordova 插件。具有从选定图片中获取 imageData 的功能。

于 2015-07-24T13:41:27.527 回答