Android(安卓)-- 超全的 File,Bitmap,Drawable,Uri, FilePath ,byte[]之间的转换方法
16lz
2021-01-26
1. File转Bitmap
2. Bitmap 转 File
3. Uri 转 File
4. File 转 Uri
5. url 转 Bitmap(加载网络图片)
6. Uri 转 Bitmap
7. Path 转 Uri
8. Uri 转 Path
9. byte[] 转 Bitmap
10. Bitmap 转 byte[]
11. Bitmap 转 Drawable
12. Drawable 转 Bitmap
1.文件(path)转Bitmap
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);//stream 转 bitmap BitmapFactory.decodeResource();//resource 转 bitmap BitmapFactory.decodeByteArray();//bytes 转 bitmap BitmapFactory.decodeFileDescriptor();//fileDescriptor 转 bitmap ... */
或 先压缩,再转
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; } (摘自第一行代码)
第三种(来自网络)
/** * 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换 * * @param context * @param imageUri */ public static String getImageAbsolutePath(Context context, Uri imageUri) { if (context == null || imageUri == null) return null; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, imageUri)) { if (isExternalStorageDocument(imageUri)) { String docId = DocumentsContract.getDocumentId(imageUri); String[] split = docId.split(":"); String type = split[0]; if ("primary".equalsIgnoreCase(type)) { return Environment.getExternalStorageDirectory() + "/" + split[1]; } } else if (isDownloadsDocument(imageUri)) { String id = DocumentsContract.getDocumentId(imageUri); Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); return getDataColumn(context, contentUri, null, null); } else if (isMediaDocument(imageUri)) { String docId = DocumentsContract.getDocumentId(imageUri); String[] split = docId.split(":"); String type = split[0]; Uri contentUri = null; if ("image".equals(type)) { contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; } else if ("video".equals(type)) { contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; } else if ("audio".equals(type)) { contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; } String selection = MediaStore.Images.Media._ID + "=?"; String[] selectionArgs = new String[]{split[1]}; return getDataColumn(context, contentUri, selection, selectionArgs); } } // MediaStore (and general) else if ("content".equalsIgnoreCase(imageUri.getScheme())) { // Return the remote address if (isGooglePhotosUri(imageUri)) return imageUri.getLastPathSegment(); return getDataColumn(context, imageUri, null, null); } // File else if ("file".equalsIgnoreCase(imageUri.getScheme())) { return imageUri.getPath(); } return null; } public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) { Cursor cursor = null; String column = MediaStore.Images.Media.DATA; String[] projection = {column}; try { cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null); if (cursor != null && cursor.moveToFirst()) { int index = cursor.getColumnIndexOrThrow(column); return cursor.getString(index); } } finally { if (cursor != null) cursor.close(); } return null; } /** * @param uri The Uri to check. * @return Whether the Uri authority is ExternalStorageProvider. */ public static boolean isExternalStorageDocument(Uri uri) { return "com.android.externalstorage.documents".equals(uri.getAuthority()); } /** * @param uri The Uri to check. * @return Whether the Uri authority is DownloadsProvider. */ public static boolean isDownloadsDocument(Uri uri) { return "com.android.providers.downloads.documents".equals(uri.getAuthority()); } /** * @param uri The Uri to check. * @return Whether the Uri authority is MediaProvider. */ public static boolean isMediaDocument(Uri uri) { return "com.android.providers.media.documents".equals(uri.getAuthority()); } /** * @param uri The Uri to check. * @return Whether the Uri authority is Google Photos. */ public static boolean isGooglePhotosUri(Uri uri) { return "com.google.android.apps.photos.content".equals(uri.getAuthority()); } /** * Try to return the absolute file path from the given Uri * 4.4 以下 * @param context * @param uri * @return the file path or null */ public static String getPath(final Context context, final Uri uri) { if (null == uri) return null; 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 = context.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) { index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); } if (index > -1) { data = cursor.getString(index); } } cursor.close(); } } return data; }
9. byte[] 转 bitmap
public Bitmap Bytes2Bimap(byte[] b) { if (b.length != 0) { return BitmapFactory.decodeByteArray(b, 0, b.length); } else { return null; }}
10. bitmap 转 byte[]
public byte[] Bitmap2Bytes(Bitmap bm) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.PNG, 100, baos); return baos.toByteArray();}
11. bitmap 转 drawable
BitmapDrawable bd= new BitmapDrawable(bitmap); BitmapDrawable bd= new BitmapDrawable(getResource(), bitmap);
12. drawable 转 bitmap
public static Bitmap drawableToBitmap (Drawable drawable) { Bitmap bitmap = null; if (drawable instanceof BitmapDrawable) { BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; if(bitmapDrawable.getBitmap() != null) { return bitmapDrawable.getBitmap(); } } // 取 drawable 的颜色格式,Bitmap.createBitmap 第三个参数 Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; if(drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) { bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); // Single color bitmap will be created of 1x1 pixel } else { bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); } //将drawable内容画到画布中 Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return bitmap;}
更多相关文章
- android红米等关于读取本地文件夹图片获取路径的问题的解决
- android中打开本地doc、pdf、ppt、text等文件功能的实现
- Android(安卓)adb方式获取手机总内存和可用内存信息
- android studio使用jni调用opencv库实现图片转换【详细实例】(二)
- Android(安卓)M动态申请获取权限android.permission.READ_PHONE_
- Android获取设备已安装的应用
- android上的一个网络接口和图片缓存框架enif
- Android-常用代码-36片段
- Android获取CPU信息(CPU名字和主频)