androidimageviewandroid-imageviewandroid-gallery

Save image from ImageView to device gallery


I'm trying to save an image from ImageView to devices gallery. I tried this code

Code Edit:

    URL url = new URL(getIntent().getStringExtra("imageURL"));
    File f  = new File(url.getPath());

    addImageToGallery(f.getPath(), this);

    public static void addImageToGallery(final String filePath, final Context context) 
    {

       ContentValues values = new ContentValues();

       values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
       values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
       values.put(MediaStore.MediaColumns.DATA, filePath);

       context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
    }

but it requires a file path in which I don't have since I'm loading the file from a URL. How can I save an image from ImageView to the gallery?

thanks..


Solution

  • Simple:

    use this code:

    //to get the image from the ImageView (say iv)
    BitmapDrawable draw = (BitmapDrawable) iv.getDrawable();
    Bitmap bitmap = draw.getBitmap();
    
    FileOutputStream outStream = null;
    File sdCard = Environment.getExternalStorageDirectory();
    File dir = new File(sdCard.getAbsolutePath() + "/YourFolderName");
    dir.mkdirs();
    String fileName = String.format("%d.jpg", System.currentTimeMillis());
    File outFile = new File(dir, fileName);
    outStream = new FileOutputStream(outFile);
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
    outStream.flush();
    outStream.close();
    

    Additionally, in order to refresh the gallery and to view the image there:

        Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        intent.setData(Uri.fromFile(file));
        sendBroadcast(intent);
    

    Also make sure that your app has the storage permission enabled:

    Go to Device Settings>Device>Applications>Application Manager>"your app">Permissions>Enable Storage permission!

    Manifest permissions:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />