Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Decode large base64 string

Tags:

android

base64

I have created a base64 string from a picture on the SD card using this(below) code, and it works but when I try to decode it (even further below) I get a java.lang.outOfMemoryException, presumably because I am not splitting the string into a reasonable size before I decode it as I am before I encode it.

byte fileContent[] = new byte[3000];
StringBuilder b = new StringBuilder();
try{
     FileInputStream fin = new FileInputStream(sel);
     while(fin.read(fileContent) >= 0) {
    b.append(Base64.encodeToString(fileContent, Base64.DEFAULT));
     }
}catch(IOException e){

}

The above code works well, but the problem comes when I try to decode the image with the following code;

byte[] imageAsBytes = Base64.decode(img.getBytes(), Base64.DEFAULT);
ImageView image = (ImageView)this.findViewById(R.id.ImageView);
image.setImageBitmap(
    BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length)
);

I have tried this way too

byte[] b = Base64.decode(img, Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length);
image.setImageBitmap(bitmap);

Now I assume that I need to split the string up into sections like my image encoding code, but I have no clue how to go about doing it.

like image 333
jcw Avatar asked Apr 09 '13 09:04

jcw


1 Answers

You need decode the image in Background thread like AsyncTask or you need reduce your image quality using BitmapFactory . Example:

 BitmapFactory.Options options = new BitmapFactory.Options();

            options.inSampleSize = 2;
            options.inPurgeable=true;
        Bitmap bm = BitmapFactory.decodeFile("Your image exact loaction",options);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();  
        bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object 

        byte[] b = baos.toByteArray(); 
        String encodedImage = Base64.encodeToString(b, Base64.DEFAULT);
like image 96
Prabu Avatar answered Sep 23 '22 10:09

Prabu