保存圖片到相冊(cè)/圖庫(kù)___Android基礎(chǔ)篇

文 | Promise Sun


一、描述

APP需要實(shí)現(xiàn)用戶手動(dòng)將圖片保存到手機(jī)相冊(cè)/圖庫(kù)
注:Android11 測(cè)試有效

二、實(shí)現(xiàn)

直接調(diào)用下面的方法即可

  /*
     * 將圖片 bitmap保存到圖庫(kù)
     */
    public static void saveBitmap(Context activity,Bitmap bitmap) {
        //因?yàn)閤ml用的是背景,所以這里也是獲得背景
//獲取參數(shù)Bitmap方式一: Bitmap bitmap=((BitmapDrawable)(imageView.getBackground())).getBitmap();
//獲取參數(shù)Bitmap方式二: Bitmap image = ((BitmapDrawable)imageView.getDrawable()).getBitmap();

        //t設(shè)置圖片名稱(chēng),要保存png,這里后綴就是png,要保存jpg,后綴就用jpg
        String imageName = System.currentTimeMillis() + "code.png";

        //創(chuàng)建文件,安卓低版本的方式
       //  File file=new File(Environment.getExternalStorageDirectory() +"/test.png");

        //Android Q  10為每個(gè)應(yīng)用程序提供了一個(gè)獨(dú)立的在外部存儲(chǔ)設(shè)備的存儲(chǔ)沙箱,沒(méi)有其他應(yīng)用可以直接訪問(wèn)您應(yīng)用的沙盒文件
        File f = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File file = new File(f.getPath() + "/"+imageName);//創(chuàng)建文件
      //        file.getParentFile().mkdirs();
        try {
            //文件輸出流
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            //壓縮圖片,如果要保存png,就用Bitmap.CompressFormat.PNG,要保存jpg就用Bitmap.CompressFormat.JPEG,質(zhì)量是100%,表示不壓縮
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
            //寫(xiě)入,這里會(huì)卡頓,因?yàn)閳D片較大
            fileOutputStream.flush();
            //記得要關(guān)閉寫(xiě)入流
            fileOutputStream.close();
            //成功的提示,寫(xiě)入成功后,請(qǐng)?jiān)趯?duì)應(yīng)目錄中找保存的圖片
            Log.e("寫(xiě)入成功!位置目錄", f.getPath() + "/"+imageName);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
            //失敗的提示,這里的Toast工具類(lèi),大家用自己項(xiàng)目中的即可,若不需要可以刪除
            ToastUtil.showToast(e.getMessage());

        } catch (IOException e) {
            e.printStackTrace();
            //失敗的提示
            ToastUtil.showToast(e.getMessage());
        }

        // 下面的步驟必須有,不然在相冊(cè)里找不到圖片,若不需要讓用戶知道你保存了圖片,可以不寫(xiě)下面的代碼。
        // 把文件插入到系統(tǒng)圖庫(kù)
        try {
            MediaStore.Images.Media.insertImage(activity.getContentResolver(),
                    file.getAbsolutePath(), imageName, null);
            ToastUtil.showToast( "保存成功,請(qǐng)您到 相冊(cè)/圖庫(kù) 中查看");
        } catch (FileNotFoundException e) {
            ToastUtil.showToast( "保存失敗");
            e.printStackTrace();
        }
        // 最后通知圖庫(kù)更新
        activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
                Uri.fromFile(new File(file.getPath()))));

    }

Note:不會(huì)獲取圖片Bitmap 參數(shù)的同學(xué)可以參考以下方式:
(下面的imageView是你的布局文件中的ImageView的id)
1)方式一:如果你的圖片來(lái)自于網(wǎng)絡(luò),該 url 以圖片的形式已經(jīng)顯示在app上了,此時(shí)需要保存這張圖片時(shí),將圖片轉(zhuǎn)換成Bitmap

 Bitmap image = ((BitmapDrawable)imageView.getDrawable()).getBitmap();

2)方式二:如果你的圖片是app本地的圖片,需要保存這張圖片時(shí),將圖片轉(zhuǎn)換成Bitmap
若ImageView的屬性設(shè)置了 android:background="@drawable/qr_code",使用下面的方式

Bitmap bitmap=((BitmapDrawable)(imageView.getBackground())).getBitmap();

若ImageView的屬性設(shè)置了 android:src="@drawable/qr_code",使用下面的方式

 Bitmap image = ((BitmapDrawable)imageView.getDrawable()).getBitmap();

三、示例(僅供參考):

保存.jpg

版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)點(diǎn)贊此文并注明出處,謝謝!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 android中圖片加載框架有很多,所有框架最終達(dá)到的目都是在Android平臺(tái)上以極度簡(jiǎn)單的方式加載和展示...
    luoqiang108閱讀 28,552評(píng)論 7 120
  • 本章節(jié)討論的是安卓圖片加載的基礎(chǔ)部分,主要依據(jù)谷歌官方培訓(xùn)教程中的代碼和方法,使用比較廣泛的圖片加載框架,很多都是...
    spring_chicken閱讀 1,114評(píng)論 0 3
  • 本文首發(fā)于 vivo互聯(lián)網(wǎng)技術(shù) 微信公眾號(hào)鏈接:https://mp.weixin.qq.com/s/aRDzmM...
    vivo互聯(lián)網(wǎng)技術(shù)閱讀 1,476評(píng)論 0 1
  • 很久之前寫(xiě)的了,發(fā)了吧,原用來(lái)總結(jié)學(xué)習(xí)的,再不發(fā)估計(jì)轉(zhuǎn)行了,文章也參考了一些資料,摳用了一些圖,主要是為了說(shuō)明問(wèn)題...
    DaZenD閱讀 2,424評(píng)論 0 1
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者,不喜歡去冒險(xiǎn),但是人生放棄了冒險(xiǎn),也就放棄了無(wú)數(shù)的可能。 ...
    yichen大刀閱讀 8,178評(píng)論 0 4

友情鏈接更多精彩內(nèi)容