2013-12-18 11 views
10

Wie der Titel andeutet, versuche ich den Benutzer meiner Android App dazu zu bringen, ein Bild von seinem Gerät auszuwählen (fertig), dann möchte ich das Bild verkleinern (fertig), komprimiere/konvertiere das Bild in png und Senden Sie es als Base64-String an eine API.Wie konvertiert man Bitmap zu PNG und dann zu Base64 in Android?

So derzeit die Größe ich das Bild wie folgt:

options.inSampleSize = calculateInSampleSize(options, MAX_IMAGE_DIMENSION, MAX_IMAGE_DIMENSION); 
options.inJustDecodeBounds = false; 
Bitmap bitmap = BitmapFactory.decodeFile(path, options); 

ich dann eine Bitmap, die ich in ein PNG konvertieren möchten, und von dort zu einem Base64. Ich habe einen Beispielcode gefunden, um ihn in ein PNG zu konvertieren und auf dem Gerät here zu speichern.

try { 
     FileOutputStream out = new FileOutputStream(filename); 
     bmp.compress(Bitmap.CompressFormat.PNG, 90, out); 
     out.close(); 
} catch (Exception e) { 
     e.printStackTrace(); 
} 

Das Problem ist, dass ich das Bild nicht speichern möchte. Ich möchte es nur als PNG im Speicher behalten und es dann weiter in eine Base64-Zeichenfolge konvertieren.

Weiß jemand, wie ich das Bild in ein PNG konvertieren und es in einer Variablen speichern könnte, oder noch besser, es sofort in base64 konvertieren? Alle Tipps sind willkommen!

Antwort

19

Versuchen Sie dieses Bitmap in png zu konvertieren:

bitmap.compress(Bitmap.CompressFormat.PNG, quality, outStream); 

prüfen method's documentation.

Sie können Bitmap direkt in Base64 konvertieren. Verwenden Sie dies zum Kodieren und Dekodieren von und nach Base64.

public static String encodeToBase64(Bitmap image) 
{ 
    Bitmap immagex=image; 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    immagex.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    byte[] b = baos.toByteArray(); 
    String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT); 

    Log.e("LOOK", imageEncoded); 
    return imageEncoded; 
} 

public static Bitmap decodeBase64(String input) 
{ 
    byte[] decodedByte = Base64.decode(input, 0); 
    return BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length); 
} 
Verwandte Themen