2012-02-08 49 views
4

我正在尝试访问android系统的photolibrary以检索图像。我有navigator.camera.getPicture函数提供的imageURI变量。在那之前没关系。但后来,我想访问photolibrary并获取此图像的base64代码。如何检索保存在android系统的photolibrary中的图像?

由于navigator.camera.getPicture不可能返回数据(imageURI和imageData),我需要稍后获取base64信息。以下是我尝试使用的代码,查看phoneGap的“文件”文档,但它不起作用。在文件:/// android_asset /文件中的错误回调中的错误:File4 = TypeError:表达式的结果'evt.target'[undefined]不是一个对象。at file:/// android_asset/www/phonegap-1.3.0.js:717)

谁能帮帮我?谢谢。

function base64(imageURI) { 
alert(imageURI); 
document.addEventListener("deviceready", onDeviceReady); 

function onDeviceReady() { 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);} 

function gotFS(fileSystem) { 
    alert("filesystem"); 
      //Next line causes error. Perhaps imageURI is not a valid path? 
    fileSystem.root.getFile(**imageURI**, null, gotFileEntry, fail);} 


function gotFileEntry(fileEntry) { 
    alert("gotfileentry"); 
    fileEntry.file(gotFile, fail);} 

function gotFile(file){ 
    alert("got file"); 
    readDataUrl(file);} 

function readDataUrl(file) { 
    alert("readDataURL"); 
    var reader = new FileReader(); 
    reader.onloadend = function(evt) { 
     console.log("Read as data URL"); 
     alert(evt.target.result); 
     }; 
    reader.readAsDataURL(file); 
} 
function fail(evt) { 
    console.log(evt.target.error.code);}} 

回答

1

好的,第一个问题是由失败函数返回的对象没有您尝试访问的属性。看看有什么错误的对象,试试这个:

function fail(evt) { 
       alert("there was an error: " + JSON.stringify(evt)); 
      } 

让我们知道生产什么......

+0

他的代码直接来自PhoneGap的API。但是JSON.stringify只返回{“code”:X}。所以你应该记录evt.code。 – 2012-02-22 22:18:45

+0

记录它,提醒它,无论 - 没关系 - 让我们只是得到错误... – tpow 2012-02-22 22:42:07

+0

?? ??我的观点是他不应该记录/警告evt.target.error.code,但只是evt.code .. – 2012-02-22 22:47:28

1

我不知道为什么你需要Getpicture中返回两个URI和数据。

如果你需要显示的图片,你可以要求Getpicture中在基地64返回数据:

function capturePhoto(){ 
     navigator.camera.getPicture(
      addPictureToActuSuccess, 
      addPictureToActuFail, { 
       quality: 50, 
       destinationType: navigator.camera.DestinationType.DATA_URL, 
       sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY 
      } 
     ); 
    } 

    function addPictureToActuSuccess(data){ 
     // Store the base64 data in a file or in a variable 
    } 

    function addPictureToActuFail(error){ 
     console.log(error); 
    } 

CSS和显示它:

url('data:image/png;base64,BASE64_DATA') /* From where you stored you base64 data */ 

这样的话,你也可以存储基础数据64并显示图片

+0

这不起作用在iphone和blackberry ..它只返回文件uri不base 64编码字符串... – 2012-04-17 17:53:58

0

我发现从API返回的imageURI必须被剥离文件协议:

var rf=app.profile.customer.site.imageURI.substring(16); // strip off file://localhost 
var reader=new FileReader(); 
reader.onloadend=function(evt){ 
    // the image data is in : evt.target.result 
    // it starts with: data:image/jpeg;base64,/9j/.... 
    // so you may need to strip off the first 24 chars 
} 
reader.readAsDataURL(rf); 

此外,如上所述,您不需要执行FileSystem/FileEntry/File;您可以创建一个FileReader,因为您拥有完全限定的URI。

这适用于我在iOS上。我将尽快测试Android,并将回发我的结果。

相关问题