2011-07-14 163 views
21

任何人都可以告訴我,或者指出我如何從Phonegap/Android的手機圖像庫中獲取圖像?有關於訪問攝像頭的文檔(效果很好),但沒有選擇現有的圖像。Phonegap - 從圖庫中選擇圖片

我正在尋找Phonegap/Javascript而不是Java。

在此先感謝!

回答

46

Erm,Camera文檔涵蓋了這一點。這不適合你嗎?詳情請查閱Camera.PictureSourceType。該文檔網站GIVENS這個例子由此得出的圖像:

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

sourceType是決定性位在這裏。它可以是Camera.PictureSourceType.CAMERA(默認值),或者對您更有用,它可以是Camera.PictureSourceType.PHOTOLIBRARYCamera.PictureSourceType.SAVEDPHOTOALBUM

Camera Documentation

+15

偉大的答案,但我認爲PhoneGap的文檔可以用一些照片做。它低於自己。它也可以幫助像我這樣的魚注意力範圍內的人:)謝謝善良的東西的讀者:) –

+0

有什麼區別:PHOTOLIBRARY vs SAVEDPHOTOALBUM – Mirko

+0

@Mirko什麼它說錫:要麼一般圖像庫上設備或特定專輯。 (注意,在某些版本的Android上有這兩個選項的怪癖)。 – Ben

1

看看這個post,它可以幫助你。

有時,上傳現有圖像時可能會遇到一些問題。該解決方案很簡單,根據this answer。簡單地說,你需要原生的Android URI轉換成一個該API可以使用:

// URL you are trying to upload from inside gallery 
window.resolveLocalFileSystemURI(img.URI, function(entry) { 
    console.log(entry.fullPath); 
    }, function(evt){ 
    console.log(evt.code); 
    } 
); 
1
document.addEventListener("deviceready",function(){ 

      window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem){ 
       var sdcard = fileSystem.root; 

       sdcard.getDirectory('dcim/camera',{create:false}, function(dcim){ 
        var directoryReader = dcim.createReader(); 
        directoryReader.readEntries(function(entries){ 
         for (var i=0; i<entries.length; i++) { 
          entries[i].file(function(f){ 
           var reader = new FileReader(); 
           reader.onloadend = function (evt) { 
           var url= evt.target.result;//base64 data uri 

           console.log(url) 
           reader.abort(); 
          }; 
          reader.readAsDataURL(f); 

          },function(error){ 
           console("Unable to retrieve file properties: " + error.code); 

          }); 

         } 

        },function(e){ 
         console.log(e.code); 
        }); 


       }, function(error){ 
        console.log(error.code); 
       }); 


      }, function(evt){ // error get file system 
       console.log(evt.target.error.code); 
      }); 



     } , true); 
0

我正在致力於cordova-plugin-photo-library插件,它提供跨平臺的方式來枚舉設備上的所有照片。

用法:

cordova.plugins.photoLibrary.getLibrary(function (library) { 
 
    // Here we have the library as array 
 
    cordova.plugins.photoLibrary.getThumbnailUrl(library[0], 
 
     function (thumbnailUrl) { image.src = thumbnailUrl; }, 
 
     function (err) { console.log('Error occured'); }, 
 
     { 
 
      thumbnailWidth: 512, 
 
      thumbnailHeight: 384, 
 
      quality: 0.8 
 
     }); 
 
    });

+0

你好@viskin。抱歉劫持,但我今天找到了你的插件,但在我的手機上,https://jsfiddle.net/kartagis/pjdqp3ku/上的代碼需要15秒。我應該使用localStorage還是加快流程? –

+0

請在項目的github頁面上打開一個問題 – viskin

0

首先 相機插件添加到CMD項目。

F:\phonegap>myapp>cordova plugin add cordova-plugin-camera 

,然後嘗試這個

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8"> 
     <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'" /> 
     <title>PhoneGap app</title> 

     <!-- Script --> 
     <script type="text/javascript" src="cordova.js" ></script> 
     <script type='text/javascript' src='jquery-3.0.0.js' ></script> 
     <script type='text/javascript'> 
     $(document).ready(function(){ 

      // Take photo from camera 
      $('#but_take').click(function(){ 
       navigator.camera.getPicture(onSuccess, onFail, { quality: 20, 
        destinationType: Camera.DestinationType.FILE_URL 
       }); 
      }); 

      // Select from gallery 
      $("#but_select").click(function(){ 
       navigator.camera.getPicture(onSuccess, onFail, { quality: 50, 
        sourceType: Camera.PictureSourceType.PHOTOLIBRARY, 
        allowEdit: true, 
        destinationType: Camera.DestinationType.FILE_URI 
       }); 
      }); 

      // Change image source 
      function onSuccess(imageData) { 
       var image = document.getElementById('img'); 
       image.src = imageData + '?' + Math.random();; 
      } 

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

     }); 
     </script> 
    </head> 
    <body> 
     <div style="margin:0 auto; width:30%!important;text-align: center;"> 
      <img src="img/cam2.jpg" id='img' style="width: 100px; height: 100px;"> 
     </div><br/> 
     <div style="width:100%; text-align:center; padding:10px;"> 
      <button id='but_take'>Take photo</button> 
      <button id='but_select'>Select photo from Gallery</button> 
     </div> 
    </body> 
</html> 

我100%肯定它的工作原理。

參考這裏 Choose an image from Camera or Gallery – PhoneGap