2013-02-18 17 views
14

Jestem całkiem nowy w systemie phonegap i mówi on, że ma funkcję przechwytywania. Więc użyłem tego i było bardzo miłe. Jednak wyświetlałem obraz w html, ale nie wiem, jak zapisać obraz.Zapisz obraz w lokalnej pamięci phonegap

według http://docs.phonegap.com/en/1.7.0/cordova_camera_camera.md.html

Możesz robić, co chcesz z zakodowanego obrazu lub URI, na przykład:

Renderowanie obrazu w tagu (patrz przykład poniżej) zapisać dane lokalnie (localStorage , lawnchair itp) opublikować dane do zdalnego serwera

Niestety nie było przykładowy kod na jak to zrobić

Jak zapisać obraz w usłudze LocalStorage lub w galerii urządzenia?

+1

znaleźć https://github.com/raananw/PhoneGap-Image-Resizer czy to nadal działa? – jhdj

+0

wymaga tylko kilku poprawek. – jhdj

Odpowiedz

22

Dobrze, że znalazłeś rozwiązanie, zrobiłem to w następujący sposób. Mam nadzieję, że pomaga komuś innemu.

Po prostu zadzwoń pod capturePhoto Funkcja na zdarzenie click button.

// A button will call this function 
// 
function capturePhoto() { 
    sessionStorage.removeItem('imagepath'); 
    // Take picture using device camera and retrieve image as base64-encoded string 
    navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50, destinationType: Camera.DestinationType.FILE_URI }); 
} 

function onPhotoDataSuccess(imageURI) { 
     // Uncomment to view the base64 encoded image data 
     // console.log(imageData); 

     // Get image handle 
     // 
     var imgProfile = document.getElementById('imgProfile'); 

     // Show the captured photo 
     // The inline CSS rules are used to resize the image 
     // 
     imgProfile.src = imageURI; 
     if(sessionStorage.isprofileimage==1){ 
      getLocation(); 
     } 
     movePic(imageURI); 
} 

// Called if something bad happens. 
// 
function onFail(message) { 
    alert('Failed because: ' + message); 
} 

function movePic(file){ 
    window.resolveLocalFileSystemURI(file, resolveOnSuccess, resOnError); 
} 

//Callback function when the file system uri has been resolved 
function resolveOnSuccess(entry){ 
    var d = new Date(); 
    var n = d.getTime(); 
    //new file name 
    var newFileName = n + ".jpg"; 
    var myFolderApp = "MyAppFolder"; 

    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSys) {  
    //The folder is created if doesn't exist 
    fileSys.root.getDirectory(myFolderApp, 
        {create:true, exclusive: false}, 
        function(directory) { 
         entry.moveTo(directory, newFileName, successMove, resOnError); 
        }, 
        resOnError); 
        }, 
    resOnError); 
} 

//Callback function when the file has been moved successfully - inserting the complete path 
function successMove(entry) { 
    //Store imagepath in session for future use 
    // like to store it in database 
    sessionStorage.setItem('imagepath', entry.fullPath); 
} 

function resOnError(error) { 
    alert(error.code); 
} 

Co robi ten kod jest

Przechwytuje obraz i zapisuje go w FolderMojejAplikacji na karcie SD urządzenia. Przechowuje w sesji imagepath, aby wstawić ją do lokalnej bazy danych.

+2

To nie działa dla mnie. Czy masz kopię roboczą? – surhidamatya

+0

Dzięki to działa dla mnie. :) – mohitum

+0

Mogę przechwycić obraz, ale nie udało mi się zapisać do lokalnego magazynu –

9

Ustawienie saveToPhotoAlbum w opcjach True również działa dobrze. Mam to od 2.9 dokumentów here.

+1

Dodatkowe punkty za prostą poradę od dokumentów. – leech