Android -- 超全的 File,Bitmap,Uri, FilePath 之间的转换方法
2018-01-24 17:42
567 查看
1.文件(path)转Bitmap
或
或 先压缩,再转
2.Bitmap 转 文件
3.Uri 转 File
4.File 转 Uri
5.url路径 转 Bitmap(加载网络图片)
6.Uri 转 Bitmap
或
7.Path 转 Uri
FilePath 转 FileUri
FilePath 转 MediaUri
8.Uri 转 Path
或(这个覆盖面更广,前面的可能有些情况不行)
大部分来源于写过的代码,第八点部分来源于网络及书本。
File file = new File(filePath); Uri uri = Uri.fromFile(file); Bitmap bitmap = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(), uri);
或
Bitmap loadbitmap = BitmapFactory.decodeFile(file); /*同类型的还有 BitmapFactory.decodeStream(InputStream inputStream); BitmapFactory.decodeResource(); BitmapFactory.decodeByteArray(); BitmapFactory.decodeFileDescriptor();... */
或 先压缩,再转
Bitmap loadbitmap = BitmapFactory.decodeFile(imagePath, getBitmapOption(2)); private BitmapFactory.Options getBitmapOption(int inSampleSize) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inPurgeable = true; options.inSampleSize = inSampleSize; return options; }
2.Bitmap 转 文件
public void saveBitmapFile(Bitmap bitmap) { File file = new File(filePath);//将要保存图片的路径 try { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos); bos.flush(); bos.close(); } catch (IOException e) { e.printStackTrace(); } }
3.Uri 转 File
/** * uri 转 File */ public File uriTurnFile(Uri uri) { return new File(uri.getPath()); }
4.File 转 Uri
/** * File 转 Uri */ public Uri fileTurnUri(File file) { return Uri.fromFile(file); }
5.url路径 转 Bitmap(加载网络图片)
/** * 根据url路径 转bitmap * * @param urlpath * @return */ public Bitmap getBitmap(String urlpath) { Bitmap map = null; try { URL url = new URL(urlpath); URLConnection conn = url.openConnection(); conn.connect(); InputStream in; in = conn.getInputStream(); map = BitmapFactory.decodeStream(in); } catch (IOException e) { e.printStackTrace(); } return map; }
6.Uri 转 Bitmap
//读取图片,并将图片缩放到指定的目标大小 InputStream stream = getContentResolver().openInputStream(uri); Bitmap bitmap = BitmapFactory.decodeStream(stream, null, options); stream.close();
或
Bitmap bitmap = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(), uri);
7.Path 转 Uri
FilePath 转 FileUri
File f = new File(filePath); Uri uri = Uri.fromFile(f);
FilePath 转 MediaUri
public static Uri getMediaUriFromPath(Context context, String path) { Uri mediaUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; Cursor cursor = context.getContentResolver().query(mediaUri, null, MediaStore.Images.Media.DISPLAY_NAME + "= ?", new String[] {path.substring(path.lastIndexOf("/") + 1)}, null); Uri uri = null; if(cursor.moveToFirst()) { uri = ContentUris.withAppendedId(mediaUri, cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID))); } cursor.close(); return uri; }
8.Uri 转 Path
/** * 4.4之前 * uri 转 path */ public String getRealPathFromUri(Context context, Uri contentUri) { Cursor cursor = null; try { String[] proj = { MediaStore.Images.Media.DATA }; cursor = context.getContentResolver().query(contentUri, proj, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } finally { if (cursor != null) { cursor.close(); } } }
/** * android 4.4 及以后获取 uri 真实路径 */ public String getRealFilePath(Uri uri) { final String scheme = uri.getScheme(); String data = null; if (scheme == null) data = uri.getPath(); else if (ContentResolver.SCHEME_FILE.equals(scheme)) { data = uri.getPath(); } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) { Cursor cursor = mContext.getContentResolver().query(uri, new String[]{MediaStore.Images.ImageColumns.DATA}, null, null, null); if (null != cursor) { if (cursor.moveToFirst()) { int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); if (index > -1) { data = cursor.getString(index); } } cursor.close(); } } return data; }
或(这个覆盖面更广,前面的可能有些情况不行)
private void handleImageBeforeKitKat(Uri uri) { String imagePath = getImagePath(uri, null); } @TargetApi(Build.VERSION_CODES.KITKAT) private void handleImageOnKitKat(Uri uri) { String imagePath = null; if (DocumentsContract.isDocumentUri(this, uri)) { //如果是Document类型的Uri,则通过document id处理 String docId = DocumentsContract.getDocumentId(uri); if ("com.android.providers.media.documents".equals(uri.getAuthority())) { String id = docId.split(":")[1];//解析出数字格式的id String selection = MediaStore.Images.Media._ID + "=" + id; imagePath = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection); } else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())) { Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(docId)); imagePath = getImagePath(contentUri, null); } } else if ("content".equalsIgnoreCase(uri.getScheme())) { //如果是content类型的uri,使用普通方式处理 imagePath = getImagePath(uri, null); } else if ("file".equalsIgnoreCase(uri.getScheme())) { //如果是file类型的Uri,直接获取图片路径 imagePath = uri.getPath(); } } private String getImagePath(Uri uri, String selection) { String path = null; //通过Uri和selection来获取真实的图片路径 Cursor cursor = getContentResolver().query(uri, null, selection, null, null); if (cursor != null) { if (cursor.moveToFirst()) { path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); } cursor.close(); } return path; } (摘自第一行代码)
大部分来源于写过的代码,第八点部分来源于网络及书本。
相关文章推荐
- android 图片路径path和uri之间的相互转换
- android Uri获取真实路径转换成File的方法
- Android Uri,Path与File的相互转换(新)
- android Uri获取真实路径转换成File的方法
- android Uri获取真实路径转换成File的方法
- android实现Uri获取真实路径转换成File的方法
- android Uri获取真实路径转换成File的方法
- android Uri获取真实路径转换成File的方法
- android Uri获取真实路径转换成File的方法
- android Uri获取真实路径转换成File的方法
- Android中文件File path与content:// Uri的相互转换
- Android中Uri和Path之间的转换的示例代码
- 【转】Android Bitmap 与 Drawable之间的转换
- Android中View转换为Bitmap及getDrawingCache=null的解决方法
- Android Bitmap 与 Drawable之间的转换
- android:Bitmap和Drawable相互转换方法
- Android Bitmap和Drawable相互转换方法
- android bitmap和base64之间的转换
- Android中 Bitmap和Drawable相互转换的方法
- Android Bitmap和Drawable相互转换方法