2012-02-08 2 views
4

이미지를 검색하기 위해 안드로이드 시스템의 photolibrary에 액세스하려고합니다. navigator.camera.getPicture 함수에서 제공하는 imageURI 변수가 있습니다. 그때까지는 괜찮습니다. 하지만 나중에 포토 라이브러리에 액세스하여이 이미지의 base64 코드를 가져와야합니다.안드로이드 시스템의 photolibrary에 저장된 이미지를 검색하려면 어떻게해야합니까?

navigator.camera.getPicture가 두 데이터 (imageURI 및 imageData)를 반환 할 수 없으므로 나중에 base64 정보를 가져와야합니다. 다음은 phoneGap의 "파일"문서를보고 사용하려고 시도한 코드이지만 작동하지 않습니다.

"fileSystem.root.getFile"call에서 멈춤 - (오류 콜백 오류 : File4 = TypeError : 표현식 'evt.target'의 결과 [undefined]가 파일이 아닙니다 : /// android_asset/www/phonegap-1.3.0.js : 717)

누가 나를 도울 수 있습니까? 감사.

답변

1

좋아, 첫 번째 문제는 실패한 함수에서 반환 한 개체에 액세스하려는 속성이 없다는 것입니다. 오류 객체에 무엇이 있는지하려면 다음을 수행하십시오

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

우리가 그 생산을 알려주십시오 ... 당신이 URI와 데이터 모두를 반환 할 getPicture 필요한 이유

+0

코드는 PhoneGap의 API에서 직접 가져옵니다. 하지만 JSON.stringify는 { "code": X} 만 반환합니다. 그래서 evt.code를 기록해야합니다. –

+0

로그인하여 경고하십시오. 문제가되지 않습니다. 단지 오류가 발생하는 경우 ... – tpow

+0

?? 내 요점은 그가 evt.target.error.code를 기록하거나 경고해서는 안되며 단지 evt.code 일 뿐이라는 것입니다. –

1

모르겠어요. CSS와 함께

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

및 표시 : 당신이 사진을 표시해야하는 경우

당신은베이스 (64)의 데이터를 반환 할 getPicture을 요청할 수 있습니다

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

그런 식으로, 당신은 또한 수 기본 64 데이터를 저장하고 그림을 표시하십시오.

+0

이것은 작동하지 않습니다. 아이폰과 블랙 베리에서 .. 파일 uri는 64 인코딩 된 문자열을 반환하지 않습니다 ... –

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을 할 필요가 없습니다. 당신은 당신이 정규화 된 URI를 가지고 있기 때문에 FileReader를 만들 수 있습니다.

이것은 iOS에서 나를 위해 일했습니다. 조만간 Android를 테스트하고 결과를 게시 할 예정입니다.

관련 문제