Image encoding and Decoding using Base64 in androi

2019-02-15 01:47发布

问题:

In my application I have faced a small issue in encoding and decoding images to String and pass it to web service. After getting the bitmap image, I convert it into byte[] and encode to String value but in Some cases it shows error I don't know why it comes. And one more doubt is Base64 class only supports to convert Bitmap image to String or any other tools available to do the same.

Thanks in advance...

回答1:

In the case of OutOfMemoryError, below code helps me.

public String BitMapToString(Bitmap bitmap){
        ByteArrayOutputStream baos=new  ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG,100, baos);
        byte [] b=baos.toByteArray();
        String temp=null;
        try{
        System.gc();
        temp=Base64.encodeToString(b, Base64.DEFAULT);
        }catch(Exception e){
            e.printStackTrace();
        }catch(OutOfMemoryError e){
            baos=new  ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG,50, baos);
            b=baos.toByteArray();
            temp=Base64.encodeToString(b, Base64.DEFAULT);
            Log.e("EWN", "Out of memory error catched");
        }
        return temp;
  }

Basically what i did is : i catch OutofMemoryError and in that catch block i resize it by 50% and then i encode it to string.



回答2:

Try My Below Sample Code Of Project

Bitmap bmp = (Bitmap) data.getExtras().get("data");

        img.setImageBitmap(bmp);
        btnadd.requestFocus();

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] b = baos.toByteArray();
        encodedImageString = Base64.encodeToString(b, Base64.DEFAULT);

        byte[] bytarray = Base64.decode(encodedImageString, Base64.DEFAULT);
        Bitmap bmimage = BitmapFactory.decodeByteArray(bytarray, 0,
                bytarray.length);