Advertisement

Android中图片文件路径地址与Uri之间的转换方法

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:PDF


简介:
本文介绍了在Android开发中将图片文件路径转化为Uri以及从Uri获取到文件路径的方法和相关代码示例。 在Android开发过程中,图片文件的路径地址与Uri是两种常见的表示方式。其中,Uri是一种统一资源标识符,用于跨应用共享数据;而路径地址则代表了文件系统中的具体位置。 ### 从Uri获取文件路径 当使用`ContentResolver`处理时,首先需要判断给定的`uri`类型: - 如果该uri为null或其scheme为空,则直接通过调用`getPath()`方法来获得对应的文件路径。 - 若uri的scheme是file(即File Uri),则同样可以通过调用`getPath()`获取到相应的本地文件地址。 - 对于Content Uri,需要使用`ContentResolver.query()`查询出对应的数据列,并从该Cursor中提取数据字段值作为实际文件路径。 示例代码如下: ```java public static String getRealFilePath(Context context, Uri uri) { if (uri == null) return null; final String scheme = uri.getScheme(); String data = null; // 如果scheme为空或者为file,则直接获取path if (null == scheme || ContentResolver.SCHEME_FILE.equals(scheme)) data = uri.getPath(); else if(ContentResolver.SCHEME_CONTENT.equals(scheme)) { Cursor cursor = context.getContentResolver().query(uri, new String[]{ImageColumns.DATA}, null, null, null); // 查询成功,获取cursor中的文件路径 if (cursor != null) { int index = 0; if(cursor.moveToFirst()) { index = cursor.getColumnIndex(ImageColumns.DATA); if(index > -1) data = cursor.getString(index); } cursor.close(); } } return data; // 返回文件路径 } ``` ### 文件路径转换成Uri 当已知图片的本地存储地址时,可以通过以下步骤获取到对应的`Content Uri`: - 首先判断该path是否为有效的图片类型。 - 对于有效类型的文件,则利用MediaStore中的相关方法构建出一个指向外部存储器中对应位置的uri。 示例代码如下: ```java private Uri filePathToUri(Context context, String path) { if (path != null) { // 创建File对象,然后转换成file uri Uri uri = Uri.fromFile(new File(path)); // 判断是否为内容类型uri,并且路径包含图片相关数据时执行额外处理逻辑。 if(uri.getScheme().equals(ContentResolver.SCHEME_FILE) && path.contains(image)) { ContentResolver cr = context.getContentResolver(); StringBuffer buff = new StringBuffer(); // 构造查询条件 buff.append(Images.ImageColumns.DATA).append(=) .append(path); Cursor cur = cr.query( Images.Media.EXTERNAL_CONTENT_URI, new String[]{ImageColumns._ID}, buff.toString(), null, null); int index = 0; // 遍历Cursor,查找符合条件的记录 for(cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) { index = cur.getColumnIndex(Images.ImageColumns._ID); if(index > -1) index = cur.getInt(index); } // 如果index为0,则说明没有匹配到任何数据;否则,根据索引构造出content uri return (index == 0) ? null : Uri.parse(content://media/external/images/media/ + index); } return uri; } return null; } ``` 在实际操作中,请注意权限管理。自Android6.0(API级别23)起,访问外部存储需要动态请求`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`权限;对于Content Uri的获取,则可能还需要特定的读取或写入权限。 理解并掌握这些转换方法对处理图片及其他文件在Android应用中的操作至关重要。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • AndroidUri
    优质
    本文介绍了在Android开发中将图片文件路径转化为Uri以及从Uri获取到文件路径的方法和相关代码示例。 在Android开发过程中,图片文件的路径地址与Uri是两种常见的表示方式。其中,Uri是一种统一资源标识符,用于跨应用共享数据;而路径地址则代表了文件系统中的具体位置。 ### 从Uri获取文件路径 当使用`ContentResolver`处理时,首先需要判断给定的`uri`类型: - 如果该uri为null或其scheme为空,则直接通过调用`getPath()`方法来获得对应的文件路径。 - 若uri的scheme是file(即File Uri),则同样可以通过调用`getPath()`获取到相应的本地文件地址。 - 对于Content Uri,需要使用`ContentResolver.query()`查询出对应的数据列,并从该Cursor中提取数据字段值作为实际文件路径。 示例代码如下: ```java public static String getRealFilePath(Context context, Uri uri) { if (uri == null) return null; final String scheme = uri.getScheme(); String data = null; // 如果scheme为空或者为file,则直接获取path if (null == scheme || ContentResolver.SCHEME_FILE.equals(scheme)) data = uri.getPath(); else if(ContentResolver.SCHEME_CONTENT.equals(scheme)) { Cursor cursor = context.getContentResolver().query(uri, new String[]{ImageColumns.DATA}, null, null, null); // 查询成功,获取cursor中的文件路径 if (cursor != null) { int index = 0; if(cursor.moveToFirst()) { index = cursor.getColumnIndex(ImageColumns.DATA); if(index > -1) data = cursor.getString(index); } cursor.close(); } } return data; // 返回文件路径 } ``` ### 文件路径转换成Uri 当已知图片的本地存储地址时,可以通过以下步骤获取到对应的`Content Uri`: - 首先判断该path是否为有效的图片类型。 - 对于有效类型的文件,则利用MediaStore中的相关方法构建出一个指向外部存储器中对应位置的uri。 示例代码如下: ```java private Uri filePathToUri(Context context, String path) { if (path != null) { // 创建File对象,然后转换成file uri Uri uri = Uri.fromFile(new File(path)); // 判断是否为内容类型uri,并且路径包含图片相关数据时执行额外处理逻辑。 if(uri.getScheme().equals(ContentResolver.SCHEME_FILE) && path.contains(image)) { ContentResolver cr = context.getContentResolver(); StringBuffer buff = new StringBuffer(); // 构造查询条件 buff.append(Images.ImageColumns.DATA).append(=) .append(path); Cursor cur = cr.query( Images.Media.EXTERNAL_CONTENT_URI, new String[]{ImageColumns._ID}, buff.toString(), null, null); int index = 0; // 遍历Cursor,查找符合条件的记录 for(cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) { index = cur.getColumnIndex(Images.ImageColumns._ID); if(index > -1) index = cur.getInt(index); } // 如果index为0,则说明没有匹配到任何数据;否则,根据索引构造出content uri return (index == 0) ? null : Uri.parse(content://media/external/images/media/ + index); } return uri; } return null; } ``` 在实际操作中,请注意权限管理。自Android6.0(API级别23)起,访问外部存储需要动态请求`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`权限;对于Content Uri的获取,则可能还需要特定的读取或写入权限。 理解并掌握这些转换方法对处理图片及其他文件在Android应用中的操作至关重要。
  • AndroidUri
    优质
    本文介绍了在Android开发中如何将图片文件路径转换为Uri以及如何通过Uri获取到文件路径的方法和实现代码。适合初学者参考学习。 下面为大家介绍如何在Android系统中进行图片文件路径地址与Uri之间的相互转换的方法。我觉得这方面的内容非常实用,现在分享给大家参考使用。一起看看吧。
  • AndroidUri相互示例代码
    优质
    本篇教程提供了一个详细的示例代码,演示如何在Android开发中实现Uri和文件路径之间的相互转换。 在项目开发过程中需要将Uri转换为绝对路径。下面分享Android Uri与文件路径互相转换的实例代码,有需求的朋友可以参考一下。
  • Android通过Uri获取真实为File实现
    优质
    本文介绍了在Android开发中如何利用URI获取文件的真实路径,并将其转化为File对象的方法。适合需要处理文件存储和访问问题的开发者阅读。 本段落实例讲述了在Android中实现通过Uri获取真实路径并转换为File的方法。分享给大家参考。具体方法如下:首先使用`data.getData()` 获取 Uri 对象;然后定义一个字符串数组 `proj`,其中包含用于查询图片数据的字段名 `MediaStore.Images.Media.DATA`;接着调用 `managedQuery(uri, proj, null, null, null)` 方法获取 Cursor 对象,并通过该对象找到对应列索引值。具体代码如下: ```java Uri uri = data.getData(); String[] proj = { MediaStore.Images.Media.DATA }; Cursor actualimagecursor = managedQuery(uri, proj, null, null, null); int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); ``` 以上步骤实现了从 Uri 转换为 File 的基本过程。
  • 二进制
    优质
    本文探讨了将图像数据转化为二进制格式以及逆向操作的技术和算法,包括编码、解码过程及其实现细节。 以下是代码的重写版本: ```java public static String getImageBinary() { File f = new File(d:\\1.jpg); // 注意使用正确的文件路径格式 BufferedImage bi; try { bi = ImageIO.read(f); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(bi, jpg, baos); byte[] bytes = baos.toByteArray(); return encoder.encodeBuffer(bytes).trim(); } catch (IOException e) { e.printStackTrace(); } return null; } ``` 主要的修改包括: - 文件路径格式更正为`d:\\1.jpg`,以确保正确的Windows文件路径表示。 - 增加了注释来说明可能需要根据实际情况调整文件路径。
  • 和Base64
    优质
    本文介绍了如何将图片与Base64编码之间进行相互转换的方法,包括了具体的代码示例和技术细节。 图片与Base64互转:将图片打开后会自动转换为base64文本;要将base64文本转换回图片,只需将其复制到相应的工具中并另存为.jpg格式即可。
  • Base64字符串
    优质
    本文介绍了如何将Base64编码的字符串转化为图片文件以及如何将本地图片文件转化为Base64编码的字符串的方法和步骤。 Base64是一种用于在网络上传输二进制数据的编码方式,它将任意的二进制数据转换成可打印的ASCII字符序列。这个过程通常用于在邮件系统、HTTP头部或者HTML中传输图片、文档等非文本内容。有两个关键操作:将图片转换为Base64字符串,并将Base64字符串还原为图片。 1. **图片转Base64字符串**: 在这个过程中,读取的图片文件(如.jpg, .png, .gif)被转化为字节流,然后根据Base64编码规则进行处理。每3个字节的数据转换成4个Base64字符,如果原始数据不是3的倍数,则会填充零并按照特定字符集来编码。最终生成的字符串会被保存到一个txt文档中。 2. **Base64字符串转图片**: 这是逆过程,读取txt文件中的Base64字符串,并将其还原成字节流。每4个字符恢复为3个原始字节。如果遇到填充字符=表示该组字符不足4个有效字符,则需要删除这些填充符。之后根据原格式创建新的图片并写入这些字节。 实现这两个功能可能需要用到`std::ifstream`和`std::ofstream`(C++)或`System.IO.FileStream`(C#)进行文件读写,以及相应的库函数来进行Base64编码与解码操作。 3. **加密与解密**: 尽管Base64不提供加密功能,但常常被用作传输过程中的一部分。例如,在对图片数据先进行某种形式的加密后转换为Base64字符串以确保安全传输。在接收端需要首先将这些字符串还原成原始字节流再执行相应的解密操作。 4. **使用场景**: Base64编码适用于多种情况,如HTML中内联显示图像、邮件中的附件传输以及在网络上传输任何不能直接作为文本段落件处理的数据类型。 通过分析实现上述功能的源代码(可能包括读取图片、编码、写入txt文档等),可以更好地理解二进制数据与文本之间的转换及其在实际应用中的作用。
  • 和流
    优质
    本篇内容主要探讨如何将图片与流文件之间进行高效、准确的相互转换的技术方法及应用场景,帮助开发者深入理解两者间的关联。 图片与流文件可以互相转换,并且可以直接运行查看效果。
  • Base64、字节数组
    优质
    本文介绍了如何将图片在三种形式之间进行相互转换的方法和技术,包括图片文件到Base64编码字符串以及字节数组的互转技巧。 支持任意图片与base64之间的转换和还原,还可以让图片和数组之间进行转换。
  • PythonDataframeMatrix
    优质
    本文章详细介绍了如何在Python编程语言中实现pandas库中的DataFrame结构和数值计算库numpy中的Matrix之间相互转换的方法。 以下展示了如何在Python中将DataFrame与Matrix进行互换: ```python #-*- encoding:utf-8 -*- import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(3,4) ,columns=list(abcd)) print(df) print(df.values) print(df.as_matrix(columns=None)) ``` 以上内容展示了如何在Python中实现DataFrame和Matrix之间的转换。希望这能为读者提供一些参考价值,也欢迎大家继续关注和支持相关技术分享平台。