TakePhoto 簡(jiǎn)介

TakePhoto 是一款用于在Android設(shè)備上獲取照片(拍照或從相冊(cè)、文件中選擇)、裁剪圖片、壓縮圖片的開(kāi)源工具庫(kù)胀蛮,目前最新版本3.0.0

3.0以下版本及API說(shuō)明糯钙,詳見(jiàn)TakePhoto2.0+粪狼。

V3.0

  • 支持通過(guò)相機(jī)拍照獲取圖片
  • 支持從相冊(cè)選擇圖片
  • 支持從文件選擇圖片
  • 支持批量圖片選取
  • 支持圖片壓縮以及批量圖片壓縮
  • 支持圖片裁切以及批量圖片裁切
  • 支持照片旋轉(zhuǎn)角度自動(dòng)糾正
  • 支持自動(dòng)權(quán)限管理(無(wú)需關(guān)心SD卡及攝像頭權(quán)限等問(wèn)題)
  • 支持對(duì)裁剪及壓縮參數(shù)個(gè)性化配置
  • 提供自帶裁剪工具(可選)
  • 支持智能選取及裁剪異常處理
  • 支持因拍照Activity被回收后的自動(dòng)恢復(fù)
  • 支持Android7.0

GitHub地址: https://github.com/crazycodeboy/TakePhoto

目錄

  • 安裝說(shuō)明
  • 演示
  • 使用說(shuō)明
  • API
  • 貢獻(xiàn)

安裝說(shuō)明

Gradle:

compile 'com.jph.takephoto:takephoto_library:3.0.0'

Maven:

<dependency>
  <groupId>com.jph.takephoto</groupId>
  <artifactId>takephoto_library</artifactId>
  <version>3.0.0</version>
  <type>pom</type>
</dependency>

演示

運(yùn)行效果圖:

1.png
2.jpg

使用說(shuō)明

使用TakePhoto有以下兩種方式:

方式一:通過(guò)繼承的方式

  1. 繼承TakePhotoActivity、TakePhotoFragmentActivity任岸、TakePhotoFragment三者之一再榄。
  2. 通過(guò)getTakePhoto()獲取TakePhoto實(shí)例進(jìn)行相關(guān)操作。
  3. 重寫(xiě)以下方法獲取結(jié)果
 void takeSuccess(TResult result);
 void takeFail(TResult result,String msg);
 void takeCancel();

此方式使用簡(jiǎn)單享潜,滿(mǎn)足的大部分的使用需求困鸥,具體使用詳見(jiàn)simple。如果通過(guò)繼承的方式無(wú)法滿(mǎn)足實(shí)際項(xiàng)目的使用剑按,可以通過(guò)下面介紹的方式疾就。

方式二:通過(guò)組裝的方式

可參照:TakePhotoActivity,以下為主要步驟:

  1. 實(shí)現(xiàn)TakePhoto.TakeResultListener,InvokeListener接口吕座。
  2. 在 onCreate,onActivityResult,onSaveInstanceState方法中調(diào)用TakePhoto對(duì)用的方法虐译。
  3. 重寫(xiě)onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)瘪板,添加如下代碼吴趴。
  @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        //以下代碼為處理Android6.0、7.0動(dòng)態(tài)權(quán)限所需
        TPermissionType type=PermissionManager.onRequestPermissionsResult(requestCode,permissions,grantResults);
        PermissionManager.handlePermissionsResult(this,type,invokeParam,this);
    }
  1. 重寫(xiě)TPermissionType invoke(InvokeParam invokeParam)方法侮攀,添加如下代碼:
 @Override
    public TPermissionType invoke(InvokeParam invokeParam) {
        TPermissionType type=PermissionManager.checkPermission(TContextWrap.of(this),invokeParam.getMethod());
        if(TPermissionType.WAIT.equals(type)){
            this.invokeParam=invokeParam;
        }
        return type;
    }
  1. 添加如下代碼獲取TakePhoto實(shí)例:
   /**
     *  獲取TakePhoto實(shí)例
     * @return
     */
    public TakePhoto getTakePhoto(){
        if (takePhoto==null){
            takePhoto= (TakePhoto) TakePhotoInvocationHandler.of(this).bind(new TakePhotoImpl(this,this));
        }
        return takePhoto;
    }    

API

獲取圖片

TakePhoto提供拍照锣枝,從相冊(cè)選擇,從文件中選擇三種方式獲取圖片兰英。

API:

/**
 * 從文件中獲取圖片(不裁剪)
 */
void onPickFromDocuments();
/**
 * 從相冊(cè)中獲取圖片(不裁剪)
 */
void onPickFromGallery();
/**
 * 從相機(jī)獲取圖片(不裁剪)
 * @param outPutUri 圖片保存的路徑
 */
void onPickFromCapture(Uri outPutUri);
/**
 * 圖片多選
 * @param limit 最多選擇圖片張數(shù)的限制
 **/
void onPickMultiple(int limit);

以上三種方式均提供對(duì)應(yīng)的裁剪API撇叁,詳見(jiàn):裁剪圖片

注:
由于不同Android Rom廠商對(duì)系統(tǒng)有不同程度的定制畦贸,有可能導(dǎo)致某種選擇圖片的方式不支持陨闹,所以為了提高TakePhoto的兼容性楞捂,當(dāng)某種選的圖片的方式不支持時(shí),TakePhoto會(huì)自動(dòng)切換成使用另一種選擇圖片的方式進(jìn)行圖片選擇趋厉。

裁剪圖片

API

TakePhoto支持對(duì)圖片進(jìn)行裁剪寨闹,無(wú)論是拍照的照片,還是從相冊(cè)、文件中選擇的圖片君账。你只需要調(diào)用TakePhoto的相應(yīng)方法即可:

/**
 * 從相機(jī)獲取圖片并裁剪
 * @param outPutUri 圖片裁剪之后保存的路徑
 * @param options 裁剪配置             
 */
void onPickFromCaptureWithCrop(Uri outPutUri, CropOptions options);
/**
 * 從相冊(cè)中獲取圖片并裁剪
 * @param outPutUri 圖片裁剪之后保存的路徑
 * @param options 裁剪配置
 */
void onPickFromGalleryWithCrop(Uri outPutUri, CropOptions options);
/**
 * 從文件中獲取圖片并裁剪
 * @param outPutUri 圖片裁剪之后保存的路徑
 * @param options 裁剪配置
 */
void onPickFromDocumentsWithCrop(Uri outPutUri, CropOptions options);
/**
 * 圖片多選繁堡,并裁切
 * @param limit 最多選擇圖片張數(shù)的限制
 * @param options  裁剪配置
 * */
void onPickMultipleWithCrop(int limit, CropOptions options);

對(duì)指定圖片進(jìn)行裁剪

另外,TakePhoto也支持你對(duì)指定圖片進(jìn)行裁剪:

/**
 * 裁剪圖片
 * @param imageUri 要裁剪的圖片
 * @param outPutUri 圖片裁剪之后保存的路徑
 * @param options 裁剪配置
 */
void onCrop(Uri imageUri, Uri outPutUri, CropOptions options)throws TException;
/**
 * 裁剪多張圖片
 * @param multipleCrop 要裁切的圖片的路徑以及輸出路徑
 * @param options 裁剪配置
 */
void onCrop(MultipleCrop multipleCrop, CropOptions options)throws TException;

CropOptions

CropOptions是用于裁剪的配置類(lèi)乡数,通過(guò)它你可以對(duì)圖片的裁剪比例椭蹄,最大輸出大小,以及是否使用TakePhoto自帶的裁剪工具進(jìn)行裁剪等净赴,進(jìn)行個(gè)性化配置绳矩。

Usage:

 CropOptions cropOptions=new CropOptions.Builder().setAspectX(1).setAspectY(1).setWithOwnCrop(true).create();  
 getTakePhoto().onPickFromDocumentsWithCrop(imageUri,cropOptions);  
 //或  
 getTakePhoto().onCrop(imageUri,outPutUri,cropOptions);  

注:
由于不同Android Rom廠商對(duì)系統(tǒng)有不同程度的定制,有可能系統(tǒng)中沒(méi)有自帶或第三方的裁剪工具劫侧,所以為了提高TakePhoto的兼容性埋酬,當(dāng)系統(tǒng)中沒(méi)有自帶或第三方裁剪工具時(shí),TakePhoto會(huì)自動(dòng)切換到使用TakePhoto自帶的裁剪工具進(jìn)行裁剪烧栋。

壓縮圖片

你可以選擇是否對(duì)圖片進(jìn)行壓縮處理写妥,你只需要告訴它你是否要啟用壓縮功能以及CompressConfig
即可。

API

 /**
  * 啟用圖片壓縮
  * @param config 壓縮圖片配置
  * @param showCompressDialog 壓縮時(shí)是否顯示進(jìn)度對(duì)話(huà)框
  * @return
  */
 void onEnableCompress(CompressConfig config,boolean showCompressDialog);

Usage:

TakePhoto takePhoto=getTakePhoto();
takePhoto.onEnableCompress(compressConfig,true);
takePhoto.onPickFromGallery();

如果你啟用了圖片壓縮审姓,TakePhoto會(huì)使用CompressImage對(duì)圖片進(jìn)行壓縮處理珍特,CompressImage目前支持對(duì)圖片的尺寸以及圖片的質(zhì)量進(jìn)行壓縮。默認(rèn)情況下魔吐,CompressImage開(kāi)啟了尺寸與質(zhì)量雙重壓縮扎筒。

對(duì)指定圖片進(jìn)行壓縮

另外,你也可以對(duì)指定圖片進(jìn)行壓縮:
Usage:

new CompressImageImpl(compressConfig,result.getImages(), new CompressImage.CompressListener() {
    @Override
    public void onCompressSuccess(ArrayList<TImage> images) {
        //圖片壓縮成功
    }
    @Override
    public void onCompressFailed(ArrayList<TImage> images, String msg) {
        //圖片壓縮失敗
    }
}).compress();

CompressConfig

CompressConfig是用于圖片壓縮的配置類(lèi)酬姆,你可以通過(guò)CompressConfig.Builder對(duì)圖片壓縮后的尺寸以及質(zhì)量進(jìn)行相關(guān)設(shè)置嗜桌。如果你想改變壓縮的方式可以通過(guò)CompressConfig.Builder進(jìn)行相關(guān)設(shè)置。
Usage:

CompressConfig compressConfig=new CompressConfig.Builder().setMaxSize(50*1024).setMaxPixel(800).create();

兼容性

Android6.0

由于Android6.0新增了”運(yùn)行時(shí)權(quán)限控制(Runtime Permissions)”辞色,為了應(yīng)對(duì)這一改變骨宠,TakePhoto加入和自動(dòng)權(quán)限管理,當(dāng)TakePhoto檢測(cè)到需要權(quán)限時(shí)相满,TakePhoto會(huì)自動(dòng)申請(qǐng)權(quán)限层亿,所以小伙伴們不用擔(dān)心權(quán)限的使用問(wèn)題。

Android7.0

在Android N中立美,Android 框架執(zhí)行了 StrictMode匿又,應(yīng)用間共享文件和以前也有所區(qū)別。為了適配Android7.0的改變建蹄,同時(shí)也為了方便大家使用TakePhoto碌更,TakePhoto會(huì)自動(dòng)根據(jù)手機(jī)的Android版本自行適配裕偿,小伙伴們依舊可以向TakePhoto傳遞Uri imageUri = Uri.fromFile(file);類(lèi)型的Uri而不用擔(dān)心兼容性問(wèn)題。

TakePhoto在深度兼容性方面的測(cè)試

3.jpg

獲取更高的兼容性

TakePhoto是基于Android官方標(biāo)準(zhǔn)API編寫(xiě)的痛单,適配了目前市場(chǎng)上主流的Rom击费。如果你在使用過(guò)程中發(fā)現(xiàn)了適配問(wèn)題,可以提交Issues桦他。

  1. 為適配部分手機(jī)拍照時(shí)會(huì)回收Activity蔫巩,TakePhoto在onSaveInstanceState與 onCreate做了相應(yīng)的恢復(fù)處理。
  2. 為適配部分手機(jī)拍照或從相冊(cè)選擇圖片時(shí)屏幕方向會(huì)發(fā)生轉(zhuǎn)變,從而導(dǎo)致拍照失敗的問(wèn)題快压,可以在AndroidManifest.xml中對(duì)使用了TakePhoto的Activity添加android:configChanges=”orientation|keyboardHidden|screenSize”配置圆仔。
<activity
    android:name=".MainActivity"
    android:screenOrientation="portrait"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

貢獻(xiàn)

如果你在使用TakePhoto中遇到任何問(wèn)題可以提Issues出來(lái)。另外歡迎大家為T(mén)akePhoto貢獻(xiàn)智慧蔫劣,歡迎大家Fork and Pull requests坪郭。

最后
既然來(lái)了,留下個(gè)喜歡再走吧脉幢,鼓勵(lì)我繼續(xù)創(chuàng)作(_)∠※

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末歪沃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嫌松,更是在濱河造成了極大的恐慌沪曙,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萎羔,死亡現(xiàn)場(chǎng)離奇詭異液走,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)贾陷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)缘眶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人髓废,你說(shuō)我怎么就攤上這事巷懈。” “怎么了慌洪?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵顶燕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蒋譬,道長(zhǎng)割岛,這世上最難降的妖魔是什么愉适? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任犯助,我火速辦了婚禮,結(jié)果婚禮上维咸,老公的妹妹穿的比我還像新娘剂买。我一直安慰自己惠爽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布瞬哼。 她就那樣靜靜地躺著婚肆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坐慰。 梳的紋絲不亂的頭發(fā)上较性,一...
    開(kāi)封第一講書(shū)人閱讀 51,231評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音结胀,去河邊找鬼赞咙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛糟港,可吹牛的內(nèi)容都是我干的攀操。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼秸抚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼速和!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起剥汤,我...
    開(kāi)封第一講書(shū)人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤颠放,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后吭敢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體慈迈,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年省有,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痒留。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蠢沿,死狀恐怖伸头,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舷蟀,我是刑警寧澤恤磷,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站野宜,受9級(jí)特大地震影響扫步,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜匈子,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一河胎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧虎敦,春花似錦游岳、人聲如沸政敢。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)喷户。三九已至,卻和暖如春访锻,著一層夾襖步出監(jiān)牢的瞬間褪尝,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工期犬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恼五,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓哭懈,卻偏偏與公主長(zhǎng)得像灾馒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子遣总,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,085評(píng)論 25 707
  • 寫(xiě)在前面 正菜 名稱(chēng):TakePhotoTakePhoto Github地址:https://github.com...
    ZRay111閱讀 20,251評(píng)論 24 14
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)睬罗、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,096評(píng)論 4 62
  • 看了一篇文章旭斥,寫(xiě)黃藥師與梅超風(fēng)間的朦朧情愫容达。 有話(huà)想說(shuō)。 武俠垂券,金庸花盐,看過(guò)一些的。羨慕...
    林疏朗閱讀 422評(píng)論 1 0
  • 為郎吟 性本兒男七尺柱菇爪, 發(fā)詞慮事念思家算芯。 憐妻不解用心苦, 責(zé)我行言滿(mǎn)錯(cuò)差凳宙。 繞耳更加相怨怒熙揍, 寒心憊體愁如麻...
    莫須有V閱讀 265評(píng)論 4 6