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/n/137323.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
CRFACRFA
上一篇 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

发表回复

登录后才能评论