Ⅰ android 圖片選擇(ImageSelector) (拍照,裁剪,壓縮,查看)
1.遍歷sdcard文件夾(指定層次深度 searchDeep ),如果文件夾發現圖片 , 添加到已搜索到圖片的文件列表中,並跳入下一個文件夾搜索
2.使用 ContentResolver 搜索 添加搜索標簽(png,jpg,jpeg,gif 等) 優點:更快速
壓縮調用
第一步-->
采樣率壓縮:設置 BitmapFactory.Options.inSampleSize 大小
第二步-->
PNG:尺寸壓縮( Config:ARGB_4444 ,工具: Canvas );
JPG:尺寸壓縮( Config:ARGB_565 ,工具: Canvas )+壓縮質量( bitmap.compress() )
注 :
1.GIF不做壓縮處理
2.尺寸壓縮:改變寬高(png,jpg)
3.壓縮質量:改變文件大小(適用jpg,png無效)
Ⅱ 調用 android 自身裁剪功能
在Android操作系統下可通過編程實現對視頻圖像進行抓拍並對圖片的裁剪與上傳功能。簡單的實現方法採用Android 自帶有關於照片的自由裁剪,非常適用及視頻抓拍的介面功能。
一、視頻抓拍
1、基本類
Android 框架通過 Camera API 或者 camer Intent 的方式,支持 捕捉圖像和視頻 。相關的大類主要有以下幾個:
(1) Camera 攝像時候必須調用到的類;
(2)SurfaceView 提供攝像頭預覽。
(3)MediaRecorder 錄像時候用到的類;
(4)Intent 如果不通過 Camera 對象來操控攝像頭,那麼用兩個intent 動作 MediaStore.ACTION_IMAGE_CAPTURE or MediaStore.ACTION_VIDEO_CAPTURE 也能夠實現攝影和錄像。
o MediaStore.ACTION_IMAGE_CAPTURE —— 向內置攝像頭程序請求圖像的意圖活動類型。
o MediaStore.ACTION_VIDEO_CAPTURE —— 向內置攝像頭程序請求視頻的意圖活動類型。
2、 Manifest 聲明
在使用Camera API前,必須做出使用 Camera 硬體的聲明。主要有下面 點:
(1) Camera 允許:(注意,如果是通過intent 意圖來操控的,則不需要下面聲明)
<uses-permission android:name="android.permission.CAMERA" />
(2)Camera 特徵,比如說名字
<uses-feature android:name="android.hardware.camera" />
(3)如果你要在SD卡中保存照片和視頻,那麼就得開啟SD卡許可權
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
(4)錄音許可權
<uses-permission android:name="android.permission.RECORD_AUDIO" />
(5)如果希望在照片中插入GPS當地信息,還得開啟GPS
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
3、使用方法
使用攝像頭的方法有兩種:
一種是編寫代碼比較少的,快速使用攝像頭的意圖Intent 方法;
另外一種就是 自動外觀的攝像頭用戶界面,要求編寫更多的代碼。
4、使用Intent 快速應用攝像頭:使用默認配置拍攝並保存
二、圖片自由裁剪
關鍵代碼如下:
public void imageCut(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
//開啟裁剪功能
intent.putExtra("crop", "true");
//設定寬高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//設定裁剪圖片寬高
intent.putExtra("outputX", 100);
intent.putExtra("outputY", 100);
//要求返回數據
intent.putExtra("return-data", true);
startActivityForResult(intent, 100);
}
返回數據後直接在onActivityResult 里對返回的圖片數據進行顯示就行了,這里由於剪切後的圖片較小,個人覺得應該不用考慮OOM的問題,問題是,在調用自帶的裁剪功能的時候,由於沒看源碼,所以不知道在調整裁剪框的時候,顯示的那副圖片有沒有進行壓縮,如果沒有進行壓縮,那麼當圖片很大的時候,載入起來就很容易出現OOM了,明顯對此由於是調用官方的API,我沒有方法去解決它。唯一的辦法就是不用它,而是自己去寫一個,就可以避免這個問題。利用如下的代碼進行壓縮,很好地避免OOM問題。
Ⅲ (譯)uCrop介紹 —— 我們自己的Android圖片裁剪庫
原文鏈接: https://yalantis.com/blog/introcing-ucrop-our-own-image-cropping-library-for-android
譯者: Eirture
我們在 Yalantis 開發了許多不同的 Android 應用,經驗告訴我們,幾乎在所有的應用中,都需要圖片裁剪的功能。圖片裁剪的用途很廣,從簡單的用戶頭像調整到圖片的比例裁剪、靈活變換等各種復雜的處理。
我們想為所有的用戶提供最好的圖片處理工具,所以決定創建Android的圖片裁剪庫 uCrop 。 可以在 Proct Hunt 上為 uCorp 投票。
也許你會好奇,為什麼我們不使用現成的 Android 圖片裁剪解決方案。 畢竟,可以在 Github 或者 Android Arsenal 上找到很多這類的庫。但是問題是,那些解決方案都不滿足我們的需求。我們來看一些主流的開源圖片裁剪庫,為什麼不符合我們的需求。
我在幾個項目裡面使用了 SoundCloud 庫很成功,但是仍然有幾個問題讓我很頭痛。
首先,你操作的是一個裁剪的框,而不是圖片本身。當需要裁剪一個很小面積的圖片時,這會你感覺有點痛苦。這是與用戶使用習慣向悖的。我確信 Instagram 傳授給我們的是一些優秀的 UX (用戶體驗),可以移動的裁剪框也已經滅絕了。
其次,SoundCloud 裁剪庫不允許用戶旋轉圖片。Come on, guys! 所有人都知道,有成百上千「不可思議」的安卓手機給照片設置了錯誤的EXIF信息(謝天謝地,我們有 CWAC 來清理這個爛攤子)。而且,很大部分的用戶是希望能夠轉動圖片的(不僅僅是 90 度)。
最後同樣重要的一點,使用 SoundCloud 庫不能改變長寬比。當然,如果你使用它僅僅是需要獲取一個方形的頭像,那沒有任何問題。但是,其它很多很有趣的頭像形狀,用這個庫無法實現。
Scissors 是一個新的庫,不久前我在一個 安卓問題周刊 上看到它的時候特別激動。但 5 分鍾內我的興奮就消失了。引用一句關於 Scissors 的 博文 :
這確實是一個值得稱贊的方法。實際上,我們找到又是一個不能旋轉圖片,也不能動態調整寬高比的庫。盡管 Scissors 集成了一些主流的圖片載入庫,像 Picasso , Glide 以及 Universal Image Loader 。希望 Scissors 在後續的版本中有更多實用的功能。
分析完這些現有庫的缺點,我們決定創建 自己的庫 ,支持手勢並且有一個良好的 UX。
安卓庫 uCrop 允許你修剪圖片來更好的使用。uCrop 重要的特性如下:
uCrop 有一個初始化的構建類型介面,來為你的應用配置一些適當的屬性。uCrop 庫最低的版本要求是 API 10,示例應用工作的版本是 API 15+ 。
你可以改變下面這個設置:
在下一篇文章中,將會展示我們構建 uCrop 的經歷,敬請關注!