2012-07-04 7 views
5

Piszę aplikację phonegap dla systemu Android iw pewnym momencie zapisuję ciąg PNG base64 jako plik. Jednak zauważyłem, że ciąg jest po prostu wrzucony do pliku i nie może być wyświetlany jako obraz po otwarciu.Phonegap - Jak wygenerować plik obrazu z łańcucha base64?

Chciałbym, aby móc zapisać obraz generowany z string.This base64 jest to, co mam:

Javascript (formatowany dla PhoneGap):

/*** Saving The Pic ***/ 
var dataURL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="; //A simple red dot 

function gotFS(fileSystem) { 
    fileSystem.root.getFile("dot.png", {create: true, exclusive: false}, gotFileEntry, fail); 
} 

function gotFileEntry(fileEntry) { 
    fileEntry.createWriter(gotFileWriter, fail); 
} 

function gotFileWriter(writer) { 
    writer.write(dataURL); //does not open as image 
} 

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

Próbowałam edytowanie kodu, aby zapisać tylko dane obrazu, ale też nie działa. (Patrz poniżej)

function gotFileWriter(writer) { 
    var justTheData = dataURL.replace(/^data:image\/(png|jpg);base64,/, "");//Removes everything up to ...'base64,' 
    writer.write(justTheData); //also does not show 
} 

HTML, który wyzwala everthing:

<p onclick="window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail)">Save a Dot</p> 

Proszę o pomoc. Dziękuję Ci.

+0

ten może być odpowiedzią na to zadanie n: [stackoferflow question 11321347] (http://stackoverflow.com/questions/8110294/nodejs-base64-image-encoding-decoding-not-quite-working) – fider

Odpowiedz

7

Wystarczy ustawić src obrazu na dane podstawowe 64, aby wyświetlić obraz.

var image = document.getElementById('myImage'); 
image.src = "data:image/jpeg;base64," + justTheData; 
+4

Próbuję zapisać plik na dysku; nie generować go dla przeglądarki. Ale dzięki za próbę, Simon. – mukama

+0

Być może będziesz musiał napisać wtyczkę ... Napisałem wtyczkę do iOS, która zapisuje obraz na płótnie do Biblioteki zdjęć, być może będziesz musiał zrobić coś podobnego. Może zaczniesz od przyjrzenia się, jak obrazy są zapisywane w Cordova Android Camera API? – Devgeeks

+1

Cóż, zapytałeś "Chciałbym móc wyświetlić obraz wygenerowany z łańcucha base64." więc to jest to, co odpowiedziałem. Odpowiednio zapisujesz dane base64 do pliku. Jeśli załadujesz te dane do łańcucha i ustawisz src tak, jak wspomniałem, będzie można go zobaczyć. Jeśli chcesz przekonwertować ten ciąg base64 do pliku binarnego png, musisz napisać wtyczkę, aby to zrobić. –

0

tutaj nie ma potrzeby, aby zastąpić ciąg base64, wystarczy ustawić konwersji ciąg wykonując:

w javascript:

var image = document.getElementById('myImage'); 
image.src = justTheData;// this convert data 

w jQuery:

$("#imageid").attr("src",justTheData)