2016-08-29 86 views
2

我正在嘗試以下代碼將位圖編碼爲base64字符串,但我總是得到錯誤的編碼。位圖Base64字符串

順便說一下,filePath是一個圖像文件路徑。

public String encode(String filePath) { 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    Bitmap bitmap = BitmapFactory.decodeFile(filePath, options); 
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 
    byte[] byte_arr = stream.toByteArray(); 
    return Base64.encodeToString(byte_arr, Base64.DEFAULT); 
} 

如何知道我是否得到錯誤的編碼?我用這個網站:

http://codebeautify.org/base64-to-image-converter

+1

檢查你是否給圖像正確的路徑,否則代碼看起來很好。 – KDeogharkar

+0

圖片的路徑是正確的,我檢查了它。我不知道什麼是錯的 – Ofek

+0

你可以用'Base64.NO_PADDING'而不是/ orred到'DEFAULT',也就是沒有'='s。 –

回答

0

試試這個:

public String getImageEncodedData(String path) { 
     File f = new File(path); 
     Bitmap imageBitmap = null; 
     try { 
      imageBitmap = BitmapFactory.decodeStream(new FileInputStream(f)); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     //added for testing base 64 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     imageBitmap.compress(Bitmap.CompressFormat.JPEG, 80, baos); 
     byte[] imageBytes = baos.toByteArray(); 
     String mImageEncodedString = Base64.encodeToString(imageBytes, Base64.DEFAULT); 
//  Log.e("TAG", "imageEncodedString: " + mImageEncodedString); 
     return mImageEncodedString; 
    } 
3

試試這個代碼,它正確的編碼對我來說。希望它可以幫助你。

public String getStringImage(Bitmap bmp) { 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
byte[] imageBytes = baos.toByteArray(); 
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT); 
return encodedImage; 
} 
0

作爲@kdeogharkar指出,你的代碼看起來很好。

首先,檢查您是否有正確的文件路徑。然後在訪問外部文件時檢查是否需要許可。

爲了處理OOM而我們加載一個大的標度圖像,我們可以使用:

File sd = Environment.getExternalStorageDirectory(); 
File image = new File(sd+filePath, imageName); 
BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath(),bmOptions); 
bitmap = Bitmap.createScaledBitmap(bitmap,parent.getWidth(),parent.getHeight(),true); 

然後使用以下的解碼和編碼方法:

public static String encodeToBase64(Bitmap image, Bitmap.CompressFormat compressFormat, int quality) 
{ 
    ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream(); 
    image.compress(compressFormat, quality, byteArrayOS); 
    return Base64.encodeToString(byteArrayOS.toByteArray(), Base64.DEFAULT); 
} 

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

實例:

String myBase64Image = encodeToBase64(myBitmap, Bitmap.CompressFormat.JPEG, 100); 
Bitmap myBitmapAgain = decodeBase64(myBase64Image); 

備註
這個答案是從混合

  1. https://stackoverflow.com/a/28351881/4758255
  2. https://stackoverflow.com/a/9768973/4758255
0

嘗試使用NO_WRAP而不是默認

String stringEncode = Base64.encodeToString(byte_arr, Base64.NO_WRAP); 
    return stringEncode; 

,並使用此online tool爲base64字符串(stringEncode)轉換爲圖片 。如果它能夠生成圖像,您的base64字符串是正確的。

+0

仍然不能正常工作= \ – Ofek

+0

讀取文件路徑時選項配置是什麼。是ARGB_8888嗎? @Ofek – KDeogharkar