iOS 獲取本地相冊(cè)圖片視頻(二)

本文代碼內(nèi)容適合自定義選擇相冊(cè)文件內(nèi)容, 例如: 多個(gè)圖操作, 多個(gè)視頻操作.

單圖單視頻操作參考
iOS 獲取本地相冊(cè)圖片視頻(一)


代碼思路

1.設(shè)置訪問相機(jī)相冊(cè)權(quán)限

2.引入框架

3.獲取本地相冊(cè)中所有相簿(相機(jī)膠卷和自定義相簿等)

4.獲取對(duì)應(yīng)相簿下的所有文件(照片和視頻等)

5.獲取對(duì)應(yīng)文件的圖片

6.獲取視頻文件信息



詳細(xì)內(nèi)容

1.設(shè)置訪問相機(jī)相冊(cè)權(quán)限

.plist 的添加方式:

添加下面的一項(xiàng),提示文字自定義
Privacy - Photo Library Additions Usage Description

source code的添加方式:

<key>NSPhotoLibraryUsageDescription</key>
<string>App需要您的同意,才能訪問相冊(cè)</string>


2.引入框架

#import <AVFoundation/AVCaptureDevice.h>
#import <AVFoundation/AVMediaFormat.h>
#import <Photos/Photos.h>
#import <AssetsLibrary/AssetsLibrary.h>

3.獲取本地相冊(cè)中所有相簿(相機(jī)膠卷和自定義相簿等)

存儲(chǔ)所有相簿的數(shù)組
// 這里創(chuàng)建一個(gè)數(shù)組, 用來存儲(chǔ)所有的相冊(cè)
NSMutableArray *allAlbumArray = [NSMutableArray array];
獲取相機(jī)膠卷相簿并存儲(chǔ)到數(shù)組
// 獲得相機(jī)膠卷
// PHAssetCollectionTypeSmartAlbum = 2,  智能相冊(cè),系統(tǒng)自己分配和歸納的
// PHAssetCollectionSubtypeSmartAlbumUserLibrary = 209,  相機(jī)膠卷
PHAssetCollection *cameraRoll = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:nil].lastObject;
// 相機(jī)膠卷相簿存儲(chǔ)到數(shù)組
[allAlbumArray addObject:cameraRoll];
自定義相簿并存儲(chǔ)到數(shù)組
// 獲得所有的自定義相簿
// PHAssetCollectionTypeAlbum = 1,  相冊(cè),系統(tǒng)外的
// PHAssetCollectionSubtypeAlbumRegular = 2, 在iPhone中自己創(chuàng)建的相冊(cè)
// assetCollections是一個(gè)集合, 存儲(chǔ)自定義的相簿
PHFetchResult<PHAssetCollection *> *assetCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
// 遍歷所有的自定義相簿
for (PHAssetCollection *assetCollection in assetCollections) {
     // 相簿存儲(chǔ)到數(shù)組
     [allAlbumArray addObject:assetCollection];
}

4.獲取對(duì)應(yīng)相簿下的所有文件(照片和視頻等)

上一步驟我們把所有相簿存儲(chǔ)在數(shù)組(allAlbumArray)里, 這里我們?cè)跀?shù)組(allAlbumArray)里取一個(gè)相簿(albumCollection)作為示例, 獲取相簿albumCollection下的所有文件

取出一個(gè)相簿, 名稱設(shè)置為:albumCollection
// 這里假設(shè)你的本地相簿數(shù)目超過2個(gè), 取出一個(gè)示例相簿為albumCollection
PHAssetCollection *albumCollection = allAlbumArray[1];
NSLog(@"相簿名:%@ 照片個(gè)數(shù):%ld", albumCollection.localizedTitle, albumCollection.count);
獲取相簿(albumCollection)下所有PHAsset對(duì)象并存儲(chǔ)在集合albumAssets中
// 獲得相簿albumCollection中的所有PHAsset對(duì)象并存儲(chǔ)在集合albumAssets中
    PHFetchResult<PHAsset *> *albumAssets = [PHAsset fetchAssetsInAssetCollection:albumCollection options:nil];

5.獲取對(duì)應(yīng)文件的圖片

上一步驟我們把相簿(albumCollection)中的所有PHAsset對(duì)象存儲(chǔ)在集合(albumAssets)中, 這里我們獲取集合(albumAssets)中的PHAsset對(duì)象的圖片及其他信息

遍歷集合(albumAssets), 獲取對(duì)應(yīng)文件的圖片及其他信息
PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
    options.resizeMode = PHImageRequestOptionsResizeModeFast;
// 同步獲得圖片, 只會(huì)返回1張圖片
options.synchronous = YES;
// 遍歷集合, 并獲取文件圖片及其他信息
for (PHAsset *asset in assets) {
    // mediaType文件類型
    // PHAssetMediaTypeUnknown = 0, 位置類型
    // PHAssetMediaTypeImage   = 1, 圖片
    // PHAssetMediaTypeVideo   = 2, 視頻
    // PHAssetMediaTypeAudio   = 3, 音頻
    int fileType = asset.mediaType;
    // 是否要原圖
    BOOL original = YES;
    CGSize size = original ? CGSizeMake(asset.pixelWidth, asset.pixelHeight) : CGSizeZero;
    // 獲取文件圖片
    [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:size contentMode:PHImageContentModeDefault options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
      // result為文件圖片
      // info其他信息
     }];
}

6.獲取視頻文件信息

步驟4中我們把相簿(albumCollection)中的所有PHAsset對(duì)象存儲(chǔ)在集合(albumAssets)中, 這里我們?cè)诩?albumAssets)取出一個(gè)視頻PHAsset對(duì)象(videoAsset), 獲取該視頻PHAsset對(duì)象(videoAsset)的文件信息

取出一個(gè)視頻PHAsset對(duì)象(videoAsset)并獲取文件信息
// 取出一個(gè)視頻對(duì)象, 這里假設(shè)albumAssets集合有視頻文件
PHAsset *videoAsset;
for (PHAsset *asset in albumAssets) {
    // mediaType文件類型
    // PHAssetMediaTypeUnknown = 0, 位置類型
    // PHAssetMediaTypeImage   = 1, 圖片
    // PHAssetMediaTypeVideo   = 2, 視頻
    // PHAssetMediaTypeAudio   = 3, 音頻
    int fileType = asset.mediaType;
    // 區(qū)分文件類型, 取視頻文件
    if (fileType == PHAssetMediaTypeVideo)
    {
          // 取出視頻文件
          videoAsset = asset;
          // 取到一個(gè)視頻對(duì)象就不再遍歷, 因?yàn)檫@里我們只需要一個(gè)視頻對(duì)象做示例
          return;
    }
}
獲取視頻PHAsset對(duì)象(videoAsset)信息
PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
options.version = PHImageRequestOptionsVersionCurrent;
options.deliveryMode = PHVideoRequestOptionsDeliveryModeAutomatic;
[[PHImageManager defaultManager]requestAVAssetForVideo:videoAsset options:options resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) {
     // 獲取信息 asset audioMix info
     // 上傳視頻時(shí)用到data  
     AVURLAsset *urlAsset = (AVURLAsset *)asset;
     NSData *data = [NSData dataWithContentsOfURL:url];
}];


注意:個(gè)人理解,若有錯(cuò)誤請(qǐng)指正,謝謝!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嗡贺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌淫痰,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件整份,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡籽孙,警方通過查閱死者的電腦和手機(jī)烈评,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來犯建,“玉大人讲冠,你說我怎么就攤上這事∈释撸” “怎么了竿开?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵谱仪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我否彩,道長(zhǎng)疯攒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任列荔,我火速辦了婚禮敬尺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贴浙。我一直安慰自己砂吞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布崎溃。 她就那樣靜靜地躺著蜻直,像睡著了一般。 火紅的嫁衣襯著肌膚如雪袁串。 梳的紋絲不亂的頭發(fā)上概而,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音般婆,去河邊找鬼到腥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蔚袍,可吹牛的內(nèi)容都是我干的乡范。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼啤咽,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼晋辆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宇整,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瓶佳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后鳞青,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霸饲,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年臂拓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厚脉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胶惰,死狀恐怖傻工,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤中捆,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布鸯匹,位于F島的核電站,受9級(jí)特大地震影響泄伪,放射性物質(zhì)發(fā)生泄漏殴蓬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一臂容、第九天 我趴在偏房一處隱蔽的房頂上張望科雳。 院中可真熱鬧,春花似錦脓杉、人聲如沸糟秘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尿赚。三九已至,卻和暖如春蕉堰,著一層夾襖步出監(jiān)牢的瞬間凌净,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工屋讶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冰寻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓皿渗,卻偏偏與公主長(zhǎng)得像斩芭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乐疆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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