這篇文章主要介紹了Android中Bitmap、File與Uri之間的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)建站10多年成都企業(yè)網(wǎng)站建設(shè)服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及高端網(wǎng)站定制服務(wù),成都企業(yè)網(wǎng)站建設(shè)及推廣,對(duì)成都護(hù)欄打樁機(jī)等多個(gè)行業(yè)擁有豐富的營(yíng)銷(xiāo)推廣經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。
簡(jiǎn)介:
Bitmap、File與Uri
1、將一個(gè)文件路徑path轉(zhuǎn)換成File
String path ; File file = new File(path)
2、講一個(gè)Uri轉(zhuǎn)換成一個(gè)path
以選擇一張圖片為例:
String path = FileTools.getRealPathFromUri(content,uri); //自定義方法在下面 public static String getRealPathFromUri(Context context, Uri uri) { if (null == uri) return null; //傳入的Uri為空,結(jié)束方法 final String scheme = uri.getScheme(); //得到Uri的scheme String realPath = null; if (scheme == null) realPath = uri.getPath(); //如果scheme為空 else if (ContentResolver.SCHEME_FILE.equals(scheme)) { realPath = uri.getPath(); //如果得到的scheme以file開(kāi)頭 } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) { //得到的scheme以content開(kāi)頭 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) { realPath = cursor.getString(index); } } cursor.close(); //必須關(guān)閉 } } //經(jīng)過(guò)上面轉(zhuǎn)換得到真實(shí)路徑之后,判斷一下這個(gè)路徑,如果還是為空的話(huà),說(shuō)明有可能文件存在于外置sd卡上,不是內(nèi)置sd卡. if (TextUtils.isEmpty(realPath)) { if (uri != null) { String uriString = uri.toString(); int index = uriString.lastIndexOf("/"); //匹配 / 在一個(gè)路徑中最后出現(xiàn)位置 String imageName = uriString.substring(index); //通過(guò)得到的最后一個(gè)位置,然后截取這個(gè)位置后面的字符串, 這樣就可以得到文件名字了 File storageDir; storageDir = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES); //查看外部?jī)?chǔ)存卡公共照片的文件 File file = new File(storageDir, imageName); //自己創(chuàng)建成文件, if (file.exists()) { realPath = file.getAbsolutePath(); } else { // //那么存儲(chǔ)在了外置sd卡的應(yīng)用緩存file中 storageDir = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES); File file1 = new File(storageDir, imageName); realPath = file1.getAbsolutePath(); } } } return realPath; 比如我在android 8.0 上運(yùn)行的時(shí)候 選擇照片之后的Uri : content://media/external/images/media/568344 進(jìn)行上面方法轉(zhuǎn)換完之后: /storage/emulated/0/com.appben.appche/browser-photos/1550297407488.jpg }
3、File 轉(zhuǎn)換成path
String path = file.getPath();
將此抽象路徑名轉(zhuǎn)換為一個(gè)路徑名字符串。所得到的字符串使用默認(rèn)名稱(chēng)分隔符來(lái)分隔名稱(chēng)序列中的名稱(chēng)。String path = file.getAbsolutePath();
如果此抽象路徑名已經(jīng)是絕對(duì)路徑名,則返回該路徑名字符串,這與 getPath() 方法一樣。如果此抽象路徑名是空的抽象路徑名,則返回當(dāng)前用戶(hù)目錄的路徑名字符串,
該目錄由系統(tǒng)屬性 user.dir 指定。否則,使用與系統(tǒng)有關(guān)的方式分析此路徑名。
在 UNIX 系統(tǒng)上,通過(guò)根據(jù)當(dāng)前用戶(hù)目錄分析某一相對(duì)路徑名,可使該路徑名成為絕對(duì)路徑名。在 Microsoft Windows 系統(tǒng)上,
通過(guò)由路徑名指定的當(dāng)前驅(qū)動(dòng)器目錄(如果有)來(lái)分析某一相對(duì)路徑名,
可使該路徑名成為絕對(duì)路徑名;否則,可以根據(jù)當(dāng)前用戶(hù)目錄來(lái)分析它。getCanonicalPath
規(guī)范路徑名是絕對(duì)路徑名,并且是惟一的。規(guī)范路徑名的準(zhǔn)確定義與系統(tǒng)有關(guān)。如有必要,此方法首先將路徑名轉(zhuǎn)換成絕對(duì)路徑名,
這與調(diào)用 getAbsolutePath() 方法的效果一樣,然后用與系統(tǒng)相關(guān)的方式將它映射到其惟一路徑名。
這通常涉及到從路徑名中移除多余的名稱(chēng)(比如 "." 和 "..")、分析符號(hào)連接(對(duì)于 UNIX 平臺(tái)),以及
將驅(qū)動(dòng)器名轉(zhuǎn)換成標(biāo)準(zhǔn)大小寫(xiě)形式(對(duì)于 Microsoft Windows 平臺(tái))。
表示現(xiàn)有文件或目錄的每個(gè)路徑名都有一個(gè)惟一的規(guī)范形式。表示非存在文件或目錄的每個(gè)路徑名也有一個(gè)惟一的規(guī)范形式
。非存在文件或目錄路徑名的規(guī)范形式可能不同于創(chuàng)建文件或目錄之后同一路徑名的規(guī)范形式。
同樣,現(xiàn)有文件或目錄路徑名的規(guī)范形式可能不同于刪除文件或目錄之后同一路徑名的規(guī)范形式。
下面是參看文章中提到的一個(gè)例子
https://blog.csdn.net/qq_39949109/article/details/80609472 File file = new File(".\\test1.txt"); File file = new File("D:\\workspace\\test\\test1.txt"); System.out.println("-----默認(rèn)相對(duì)路徑:取得路徑不同------"); System.out.println(file1.getPath()); System.out.println(file1.getAbsolutePath()); System.out.println("-----默認(rèn)絕對(duì)路徑:取得路徑相同------"); System.out.println(file2.getPath()); System.out.println(file2.getAbsolutePath()); 結(jié)果是: -----默認(rèn)相對(duì)路徑:取得路徑不同------ .\test1.txt D:\workspace\test\.\test1.txt -----默認(rèn)絕對(duì)路徑:取得路徑相同------ D:\workspace\test\test1.txt D:\workspace\test\test1.txt File file = new File("..\\src\\test1.txt"); System.out.println(file.getAbsolutePath()); System.out.println(file.getCanonicalPath()); //得到的結(jié)果 D:\workspace\test\..\src\test1.txt D:\workspace\src\test1.txt
4、URI 與Uri的區(qū)別
URI 是java.net的子類(lèi)
Uri 是android.net的子類(lèi),Uri不能被實(shí)例化
5、URI 轉(zhuǎn)換成 File
File file = null; try{ file = new File(new URI(uri.toString())); }catch(URISyntaxException e){ e.printStackTrace(); }
6、File 轉(zhuǎn)換成URI
URI uri = file.toURI();
7、Path 轉(zhuǎn)換成Uri
Uri uri = Uri.parse(path);
8、圖片的Uri轉(zhuǎn)Bitmap
Bitmap bitmap = BitmapFactory.decodeStream(contentResolver.openInputStream(uri))
9、File 轉(zhuǎn)到bitmap
Bitmap bitmap = BitmapFactory.decodeFile(file.getPath); //這個(gè)file要是真實(shí)路徑創(chuàng)建的file
10、bitmap 轉(zhuǎn) file,可以理解為將bitmap進(jìn)行保存.
//自己創(chuàng)建想要保存的文件的文件對(duì)象 BuffferedOutPutStream bos = new BufferedOutputStream(new FileOutputStream(file)); bos.flush; bos.close;
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Android中Bitmap、File與Uri之間的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
分享題目:Android中Bitmap、File與Uri之間的示例分析
當(dāng)前地址:http://chinadenli.net/article24/ihseje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、網(wǎng)站設(shè)計(jì)公司、定制網(wǎng)站、動(dòng)態(tài)網(wǎng)站、企業(yè)網(wǎng)站制作、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)