Tuesday, March 8, 2016

Select Image from Gallery or Capture through Camera and Store it in shared preferences and use it inside application in Android

First you need to convert image to Base64 String representation and then store it in shared 
preference as follows :

Bitmap realImage = BitmapFactory.decodeStream(stream);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
realImage.compress(Bitmap.CompressFormat.JPEG, 100, baos);   
byte[] b = baos.toByteArray(); 

String encodedImage = Base64.encodeToString(b, Base64.DEFAULT);

textEncode.setText(encodedImage);

SharedPreferences shre = PreferenceManager.getDefaultSharedPreferences(this);

Editor edit=shre.edit();
edit.putString("image_data",encodedImage);
edit.commit();

and you can retrieve the image using Bitmap as :


SharedPreferences shre = PreferenceManager.getDefaultSharedPreferences(this);
String previouslyEncodedImage = shre.getString("image_data", "");

if( !previouslyEncodedImage.equalsIgnoreCase("") ){

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

if You are using capturing image with camera or picking up from galleryin both way you can use this methods as :

private static final int CAPTURE_IMAGE = 0;
private static final int SELECT_PICTURE = 1;

and then implement this method :


public void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == CAPTURE_IMAGE) {
        Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
        storeImage(thumbnail);
    } else if (requestCode == SELECT_PICTURE) {
        Uri mImageUri = data.getData();
        Bitmap thumbnail = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), mImageUri);
        storeImage(thumbnail);
    }
}

and store Image method is as follows :

private void storeImage(Bitmap thumbnail) {

    // Removing image saved earlier in shared prefernces
    shre = PreferenceManager.getDefaultSharedPreferences(getActivity());
    SharedPreferences.Editor edit=shre.edit();
    edit.remove("image_data");
    edit.commit();

    ByteArrayOutputStream bytes = new ByteArrayOutputStream();

    thumbnail.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    File destination = new File(Environment.getExternalStorageDirectory(),
            System.currentTimeMillis() + ".jpg");
    FileOutputStream fo;
    try {
        destination.createNewFile();
        fo = new FileOutputStream(destination);
        fo.write(bytes.toByteArray());
        fo.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    imageview.setImageBitmap(thumbnail);
    byte[] b = bytes.toByteArray();
    String encodedImage = Base64.encodeToString(b, Base64.DEFAULT);
    //saving image to shared preferences
    edit.putString("image_data",encodedImage);
    edit.commit();
}

2 comments:

  1. textEncode.setText(encodedImage); this line is unrecognized symbol whats the decleration for it

    ReplyDelete