2013-12-18 27 views
10

Başlıktan da anlaşılacağı gibi, Android uygulamamın kullanıcısını cihazından bir görüntü seçmek için kullanıyorum (bitmiş), daha sonra görüntüyü küçültmek (bitmek), görüntüyü png olarak sıkıştırmak/dönüştürmek ve bir base64 dizesi olarak bir API'ye gönderin.Nasıl bitmap PNG ve sonra Android'de base64 dönüştürmek için?

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

Ben sonra bir PNG dönüştürmek istediğiniz bir bit eşlem, var, ve oradan bir base64 için:

Bu yüzden şu anda şöyle görüntüyü yeniden boyutlandırmak. Bir PNG'ye dönüştürmek ve cihazda here cihazında saklamak için bir örnek kod buldum.

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

Sorun şu ki, resmi kaydetmek istemiyorum. Sadece bir PNG olarak bellekte tutmak ve daha sonra bir base64 dizesine daha fazla dönüştürmek istiyorum.

Görüntüyü png'ye nasıl dönüştürdüğümü ve bu şekilde bir değişkene nasıl saklayacağımı veya daha da iyi bir şekilde base64'e nasıl dönüştürdüğümü bilen var mı? Tüm ipuçları bekliyoruz!

cevap

19

png içine bitmap dönüştürmek için bu deneyin:

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

kontrol method's documentation.

Bitmap'i Base64'e doğrudan dönüştürebilirsiniz. Ve Base64 kodlama ve kod çözme için bunu kullanın.

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); 
} 
İlgili konular