2013-12-18 14 views
10

Như tiêu đề ngụ ý, tôi đang cố gắng để người dùng ứng dụng Android của tôi chọn một hình ảnh từ thiết bị của mình (xong), sau đó tôi muốn chia tỷ lệ hình ảnh (xong), nén/chuyển đổi hình ảnh thành png và gửi nó đến một API dưới dạng chuỗi base64.Làm thế nào để chuyển đổi bitmap thành PNG và sau đó thành base64 trong Android?

Vì vậy, tôi đang thay đổi kích thước hình ảnh như vậy:

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

sau đó tôi có một bitmap, mà tôi muốn chuyển đổi sang một PNG, và từ đó đến một base64. Tôi tìm thấy một số mã ví dụ để chuyển đổi sang PNG và lưu trữ nó trên thiết bị here.

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

Vấn đề là tôi không muốn lưu hình ảnh. Tôi chỉ muốn giữ nó trong bộ nhớ như là một PNG và sau đó chuyển đổi nó hơn nữa để một chuỗi base64.

Có ai biết cách tôi có thể chuyển đổi hình ảnh thành png và lưu trữ hình ảnh theo một cách như vậy hay thậm chí tốt hơn, chuyển nó thành base64 ngay lập tức? Tất cả các mẹo đều được chào đón!

Trả lời

19

Hãy thử này để chuyển đổi bitmap thành png:

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

Kiểm tra method's documentation.

Bạn có thể chuyển đổi trực tiếp bitmap thành Base64. Sử dụng điều này để mã hóa và giải mã từ và đến 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); 
} 
Các vấn đề liên quan