Android保存圖片到相冊

一、選取圖片

在進行圖片保存操作之前,我們需要先從手機的相冊中選取一張圖片。這可以通過調用系統相冊,或者使用第三方圖片庫來實現。

使用系統相冊

使用系統相冊需要我們通過隱式意圖(Intent)打開相冊。下面是打開相冊並返回結果的代碼示例:

// 打開相冊
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_CODE_SELECT_IMAGE);

// 獲取選中的圖片Uri
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_SELECT_IMAGE && resultCode == RESULT_OK) {
        Uri selectedImageUri = data.getData();
        // 處理選中的圖片
    }
}

使用第三方圖片庫

如果需要更豐富的圖片展示和處理功能,我們可以使用第三方圖片庫。例如,使用Glide加載圖片:

Glide.with(this)
        .load(imageUrl)
        .into(imageView);

二、保存圖片

將圖片保存到相冊需要以下幾個步驟:

1、獲取圖片的Bitmap對象。

2、創建保存圖片的文件路徑。

3、保存圖片到指定路徑。

4、通知相冊刷新。

獲取圖片的Bitmap對象

如果圖片已經加載到了ImageView中,可以使用以下代碼獲取Bitmap對象:

imageView.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(imageView.getDrawingCache());
imageView.setDrawingCacheEnabled(false);

創建保存圖片的文件路徑

在Android Q之前,可以通過以下代碼創建保存圖片的文件路徑:

String imagePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath() +
                    File.separator + "demo.jpg";
File file = new File(imagePath);
if (!file.exists()) {
    boolean result = file.createNewFile();
}

Android Q 及以上版本的處理方式有所不同,需要使用MediaStore API來保存圖片。下面會有詳細的介紹。

保存圖片到指定路徑

使用以下代碼將Bitmap對象保存到指定文件路徑:

try {
    FileOutputStream fos = new FileOutputStream(file);
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
    fos.flush();
    fos.close();
} catch (Exception e) {
    e.printStackTrace();
}

通知相冊刷新

在保存圖片成功後,需要向系統發送廣播通知相冊刷新。這樣才能在相冊中看到保存的圖片。

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, 
                Uri.fromFile(new File(imagePath))));

三、在Android Q及以上版本中保存圖片到相冊

在Android Q及以上版本中,文件存儲得到了重新設計,並且禁止了直接操作外部存儲空間。因此,直接使用上面的代碼保存圖片到指定路徑的方式已經行不通了。

使用MediaStore API保存圖片

在Android Q及以上版本中,需要使用MediaStore API來保存圖片到相冊。具體流程如下:

1、創建一個ContentValues對象,並設置插入的數據信息。

2、使用ContentResolver將數據插入到MediaStore.Images.Media表中。

3、獲取新增圖片的Uri。

以下是保存圖片到相冊的完整代碼:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    ContentValues values = new ContentValues();
    values.put(MediaStore.Images.Media.DISPLAY_NAME, "demo");
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
    values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_DCIM);

    ContentResolver resolver = getContentResolver();
    Uri external = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    Uri insertUri = resolver.insert(external, values);

    try {
        OutputStream stream = resolver.openOutputStream(insertUri);
        boolean compressed = bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        stream.flush();
        stream.close();
        if (compressed) {
            Toast.makeText(this, "保存成功!", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "保存失敗!", Toast.LENGTH_SHORT).show();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    // 通知相冊刷新
    if (insertUri != null) {
        MediaScannerConnection.scanFile(this, new String[]{insertUri.getPath()}, new String[]{"image/jpeg"}, null);
    }
} else {
    // Android Q以下的保存方式
    // ...
}

四、總結

本文詳細闡述了Android保存圖片到相冊的步驟,從選取圖片到保存圖片的完整流程進行了詳細介紹,並給出了相關代碼示例。尤其是在Android Q及以上版本中,由於對文件存儲機制的變更,需要使用MediaStore API來保存圖片到相冊,這一點需要我們特別注意。

原創文章,作者:CRFA,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/137323.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
CRFA的頭像CRFA
上一篇 2024-10-04 00:17
下一篇 2024-10-04 00:17

相關推薦

  • 用Python繪製酷炫圖片

    在本篇文章中,我們將展示如何使用Python繪製酷炫的圖片。 一、安裝Python繪圖庫 在使用Python繪製圖片之前,我們需要先安裝Python繪圖庫。Python有很多繪圖庫…

    編程 2025-04-29
  • 使用axios獲取返回圖片

    使用axios獲取返回圖片是Web開發中很常見的需求。本文將介紹如何使用axios獲取返回圖片,並從多個方面進行詳細闡述。 一、安裝axios 使用axios獲取返回圖片前,首先需…

    編程 2025-04-29
  • Python 圖片轉表格

    本文將詳細介紹如何使用Python將圖片轉為表格。大家平時在處理一些資料的時候難免會遇到圖片轉表格的需求。比如從PDF文檔中提取表格等場景。當然,這個功能也可以通過手動複製、粘貼,…

    編程 2025-04-29
  • Python緩存圖片的處理方式

    本文將從多個方面詳細闡述Python緩存圖片的處理方式,包括緩存原理、緩存框架、緩存策略、緩存更新和緩存清除等方面。 一、緩存原理 緩存是一種提高應用程序性能的技術,在網絡應用中流…

    編程 2025-04-29
  • Python如何抓取圖片數據

    Python是一門強大的編程語言,能夠輕鬆地進行各種數據抓取與處理。抓取圖片數據是一個非常常見的需求。在這篇文章中,我們將從多個方面介紹Python如何抓取圖片數據。 一、使用ur…

    編程 2025-04-29
  • Python利用Image加圖片的方法

    在Python中,利用Image庫可以快速處理圖片,並加入需要的圖片,本文將從多個方面詳細闡述這個操作。 一、Image庫的安裝和基礎操作 首先,我們需要在Python中安裝Ima…

    編程 2025-04-28
  • Avue中如何按照後端返回的鏈接顯示圖片

    Avue是一款基於Vue.js、Element-ui等技術棧的可視化開發框架,能夠輕鬆搭建前端頁面。在開發中,我們使用到的圖片通常都是存儲在後端服務器上的,那麼如何使用Avue來展…

    編程 2025-04-28
  • 使用CKSlide實現圖片輪播

    CKSlide是一個基於jQuery的插件,可以方便地為網頁添加幻燈片和圖片輪播效果。使用CKSlide可以讓網站更加生動、活潑,給用戶帶來更好的體驗。 一、CKSlide基本用法…

    編程 2025-04-28
  • Python中使用socket傳輸圖片

    本文將從多個方面介紹如何使用Python中的socket模塊傳輸圖片,涉及到準備工作、發送方部分和接收方部分的詳細代碼實現。 一、準備工作 在使用Python中的socket模塊進…

    編程 2025-04-28
  • Python窗口中導入圖片

    Python作為一種高級語言,在圖形界面的應用和操作方面越來越得心應手。本篇文章將詳細闡述Python窗口中導入圖片的方法和實現。 一、導入圖片的準備工作 在導入圖片前,我們需要先…

    編程 2025-04-28

發表回復

登錄後才能評論