作爲@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);
備註
這個答案是從混合
- https://stackoverflow.com/a/28351881/4758255
- https://stackoverflow.com/a/9768973/4758255
檢查你是否給圖像正確的路徑,否則代碼看起來很好。 – KDeogharkar
圖片的路徑是正確的,我檢查了它。我不知道什麼是錯的 – Ofek
你可以用'Base64.NO_PADDING'而不是/ orred到'DEFAULT',也就是沒有'='s。 –