2016-01-21 23 views
9

Tôi đang phát triển một ứng dụng Android tải lên Base64 Chuỗi hình ảnh vào máy chủ web. Vì vậy, tôi đã sử dụng đoạn mã sau để chuyển đổi một Bitmap thành Base64 Chuỗi.Cách chuyển đổi Bitmap thành Base64 String

public String getEncoded64ImageStringFromBitmap(Bitmap bitmap) { 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 
    byte[] byteFormat = stream.toByteArray(); 
    String imgString = Base64.encodeToString(byteFormat, Base64.NO_WRAP); 
    return imgString; 
} 

Ví dụ: tôi cần chuyển đổi số image này. Sau khi chuyển đổi, tôi không nhận được chuỗi Base64 như tôi mong đợi.

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 

Các thực Base64 Chuỗi nó phải được điều này (tôi sử dụng này website để chuyển đổi)

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 

vấn đề trong chuyển đổi của tôi là gì? Cảm ơn bạn!

+1

Không có vấn đề với chuyển đổi của bạn. Bạn đang chạy nó thông qua một bước nén bổ sung, mà rất có thể là tài khoản cho sự khác biệt. –

+0

cố gắng thay đổi bitmap.compress (Bitmap.CompressFormat.JPEG, 100, luồng); như có thể được từ nén của họ nó làm cho một số khác biệt, – theLazyFinder

+0

Tôi đã cố gắng sử dụng Bitmap.CompressFormat.JPEG. Nhưng kết quả trong chuỗi base64 android là khác nhau với việc chuyển đổi trang web. – SinLok

Trả lời

3

sử dụng đoạn mã sau đây để chuyển đổi bitmap để mảng byte:

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); 
byte[] byteArray = byteArrayOutputStream .toByteArray(); 

sau đó để mã hóa base64 từ mảng byte sử dụng câu lệnh sau:

String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT); 
+1

Mã của tôi và mã của bạn giống nhau, chỉ tên biến là khác nhau – SinLok

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

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

Mã của tôi tương tự với bạn. Tôi không thể chuyển đổi bitmap thành chuỗi base64 tương ứng. – SinLok

+0

Không, mã của bạn không giống như mã của tôi. Mã của bạn là String imgString = Base64.encodeToString (byteFormat, Base64.NO_WRAP); và tôi đã thay đổi nó thành String imageEncoded = Base64.encodeToString (b, Base64.DEFAULT); Bạn đã sử dụng Base64.No_WRAP, nhưng nó là Base64.DEFAULT trong mã của tôi. – Dhruv

+0

Ồ tôi hiểu, nhưng tôi sao chép mã của bạn để sử dụng. Và thấy rằng chuỗi Base64 tương tự Base64.NO_WRAP. Chỉ có chuỗi Base64 khác không phải là một dòng. Tuy nhiên, việc sử dụng Base64.DEFAULT để tạo chuỗi Base64 không giống với chuỗi Base64 thực. Xin lỗi vì tiếng Anh xấu của tôi :) – SinLok

0
public String getBase64ImageString(Bitmap photo) { 
     String imgString; 
     if(photo != null) { 
      ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
      photo.compress(Bitmap.CompressFormat.PNG, 100, outputStream); 
      byte[] profileImage = outputStream.toByteArray(); 

      imgString = Base64.encodeToString(profileImage, 
        Base64.NO_WRAP); 
     }else{ 
      imgString = ""; 
     } 

     return imgString; 
    } 

Vượt qua Bitmap của bạn trong các tham số bạn sẽ nhận được chuỗi hình ảnh của mình.

Các vấn đề liên quan