PHImageManager

  • 父類:NSObject

提供獲取或生成預覽縮略圖和全尺寸圖片裆悄,或者視頻數(shù)據(jù)的方法。

一、概述

使用這些方法來獲取全尺寸圖片資源或縮略圖但校,或者獲取AV Foundation對象來播放、輸出啡氢、控制視頻資源状囱。

加載圖片或視頻數(shù)據(jù):

  1. 使用PHAsset類來獲取你想要的資源
  2. 調用+ (PHImageManager *)defaultManager;方法來獲取圖片管理單例對象倘是。
  3. 使用“請求圖片”和“請求視頻對象”中的方法來加載資源的圖片或視頻數(shù)據(jù)亭枷。

圖片管理器會緩存它提供過的圖像和數(shù)據(jù),所以之后向同一個資源請求同樣的參數(shù)會很快速的返回搀崭。

如果你需要同時加載很多資源的圖片數(shù)據(jù)叨粘,如果你想要很快速的加載圖片請使用PHCachingImageManager預加載緩存。例如瘤睹,你在一個展示資源的視圖中想要使用縮略圖填充宣鄙,你可以在滾動到位置之前提前緩沖。

二默蚌、內容

1. 獲得圖片管理器

+ (PHImageManager *)defaultManager;

獲得圖片管理器單例冻晤。

2. 請求圖片

- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(nullable PHImageRequestOptions *)options resultHandler:(void (^)(UIImage *__nullable result, NSDictionary *__nullable info))resultHandler;
  • asset PHAsset - 要獲取的資源
  • targetSize CGSize - 想要獲取的圖片的大小绸吸。
  • contentMode PHImageContentMode - 圖片的大小與縱橫比的關系鼻弧。
  • options PHImageRequestOptions - 告訴Photos如何處理請求设江,如何格式化圖片,并且通知你的應用處理過程和錯誤攘轩。
  • resultHandler block - 加載完成圖片后被調用叉存。
  • result UIImage - 獲取到的圖片
  • info NSDictionary - 關于請求狀態(tài)的信息。查看Image Result Info Keys獲取可能出現(xiàn)的鍵合值度帮。

獲取給定資源的圖片歼捏。
當你調用這個方法,Photos會加載或生成一個和你給定的大小一樣或接近的圖片笨篷。然后瞳秽,它會調用你的resultHandler回調來返回這張圖片。為了更快速的反應你的請求率翅,Photos可能會提供一個略大于給定大小的圖片——因為這張圖片可能已經被緩存或者可以更有效率的生成這張圖片练俐。根據(jù)你給定的options以及資源的當前狀態(tài),Photos可能會從網絡下載這個資源的數(shù)據(jù)冕臭。
默認情況下這個方法是異步執(zhí)行的腺晾。如果你在后臺的線程中調用這個方法,那么你可能需要改變options參數(shù)中的synchronous屬性為YES以阻塞線程辜贵,直到圖片被準備好或者發(fā)生錯誤悯蝉,這個時候Photos會調用你的resultHandler
對于一個異步請求托慨,Photos可能會不止一次的調用你的resultHandler回調泉粉。Photos第一次調用回調會提供一個合適的低質量圖片作為臨時展示,然后它會去準備一個高質量的圖片榴芳。(如果低質量的圖片立刻可以返回嗡靡,那么第一次調用回調可能在方法返回一個返回值之前調用。)當高質量的圖片準備好窟感,Photos會再次調用你的resultHandler來提供這張圖片讨彼。如果圖片管理器已經緩存了請求的圖片的全質量圖片,Photos只會調用一次你的resultHandler柿祈。當Photos提供一個臨時的低質量圖片的時候哈误,resultHandler中的info參數(shù)中的PHImageResultIsDegradedKey鍵會標示。
你可以使用這個方法獲取照片和視頻資源——對于一個視頻資源躏嚎,一個圖片請求將提供一個縮略圖或者關鍵幀蜜自。

PHImageContentMode

typedef NS_ENUM(NSInteger, PHImageContentMode) {
    PHImageContentModeAspectFit = 0, // 縮放圖像,用更大的尺寸填充給定的目標尺寸卢佣。
    PHImageContentModeAspectFill = 1, // 縮放圖像重荠,使其完全填充給定的目標尺寸。
    PHImageContentModeDefault = PHImageContentModeAspectFit // 默認虚茶,PHImageContentModeAspectFit
} PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);
- (PHImageRequestID)requestImageDataForAsset:(PHAsset *)asset options:(nullable PHImageRequestOptions *)options resultHandler:(void(^)(NSData *__nullable imageData, NSString *__nullable dataUTI, UIImageOrientation orientation, NSDictionary *__nullable info))resultHandler;
  • asset PHAsset - 要獲取的資源戈鲁。
  • options PHImageRequestOptions - 告訴Photos如何處理請求校赤,如何格式化圖片氧腰,并且通知你的應用處理過程和錯誤。
  • resultHandler block - 加載完成圖片后被調用盟步。
  • imageData NSData - 獲取到的圖片數(shù)據(jù)掷匠。
  • dataUTI NSString - 請求的圖片烹卒。
  • orientation UIImageOrientation - 圖片的想要展示的方向狱掂。
  • info NSDictionary - 關于請求狀態(tài)的信息穆刻。查看Image Result Info Keys獲取可能出現(xiàn)的鍵合值。

獲取給定資源的全尺寸圖片消约。
當你調用這個方法肠鲫,Photos加載這個圖片資源的最大的表現(xiàn)形式,然后會調用你的resultHandler回調來提供這個數(shù)據(jù)荆陆。根據(jù)你給定的options以及資源的當前狀態(tài),Photos可能會從網絡下載這個資源的數(shù)據(jù)集侯。
默認情況下這個方法是異步執(zhí)行的被啼。如果你在后臺的線程中調用這個方法,那么你可能需要改變options參數(shù)中的synchronous屬性為YES以阻塞線程棠枉,直到圖片被準備好或者發(fā)生錯誤浓体,這個時候Photos會調用你的resultHandler。這個方法忽略deliveryMode選項——Photos只會調用一次你的resultHandler辈讶。
如果version選項被設置為PHImageRequestOptionsVersionCurrent命浴,Photos將會提供渲染的圖片數(shù)據(jù),包含了所有對資源內容的編輯結果贱除。否則生闲,Photos將會提供資源的最原始圖像。

3. 請求視頻對象

- (PHImageRequestID)requestPlayerItemForVideo:(PHAsset *)asset options:(nullable PHVideoRequestOptions *)options resultHandler:(void (^)(AVPlayerItem *__nullable playerItem, NSDictionary *__nullable info))resultHandler;
  • asset PHAsset - 要播放的視頻資源月幌。
  • options PHVideoRequestOptions - 告訴Photos如何處理請求碍讯,并且通知你的應用處理過程和錯誤。
  • resultHandler block - 加載資源數(shù)據(jù)后被調用扯躺。
  • playerItem AVPlayerItem - 獲取到的視頻數(shù)據(jù)捉兴。
  • info NSDictionary - 關于請求狀態(tài)的信息。查看Image Result Info Keys獲取可能出現(xiàn)的鍵合值录语。

獲取要播放的視頻資源的表現(xiàn)形式倍啥,將被異步加載。
當你調用這個方法澎埠,Photos會下載這個視頻數(shù)據(jù)(如果需要的話)并且創(chuàng)建一個播放項虽缕。然后調用你的resultHandler回調來提供請求獲取的視頻。
當你想要簡單的播放存在的視頻資源請使用這個方法蒲稳。對于更多的選項詳細信息或者使用資源的音頻和視頻軌道工作彼宠,則使用- (PHImageRequestID)requestAVAssetForVideo:(PHAsset *)asset options:(PHVideoRequestOptions *)options resultHandler:(void (^)(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info))resultHandler;方法鳄虱。

- (PHImageRequestID)requestExportSessionForVideo:(PHAsset *)asset options:(nullable PHVideoRequestOptions *)options exportPreset:(NSString *)exportPreset resultHandler:(void (^)(AVAssetExportSession *__nullable exportSession, NSDictionary *__nullable info))resultHandler;
  • asset PHAsset - 將要被創(chuàng)建導出會話的視頻資源
  • options PHVideoRequestOptions - 告訴Photos如何處理請求凭峡,并且通知你的應用處理過程和錯誤拙已。
  • exportPreset NSString - 要導出的資源的導出預設名。請查看AVAssetExportSession摧冀。
  • resultHandler block - 加載資源數(shù)據(jù)并且準備導出會話后被調用倍踪。
  • exportSession AVAssetExportSession - 使用這個將視頻資源數(shù)據(jù)寫入文件
  • info NSDictionary - 關于請求狀態(tài)的信息。查看Image Result Info Keys獲取可能出現(xiàn)的鍵合值索昂。

獲取一個將視頻資源的數(shù)據(jù)寫入文件的導出會話建车,將被異步加載。
當你調用這個方法椒惨,Photos會下載這個視頻數(shù)據(jù)(如果需要的話)并且創(chuàng)建一個導出會話缤至。然后調用你的resultHandler回調來提供請求獲取的視頻。
對于額外的導出選項康谆,使用- (PHImageRequestID)requestAVAssetForVideo:(PHAsset *)asset options:(PHVideoRequestOptions *)options resultHandler:(void (^)(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info))resultHandler;方法并且創(chuàng)建AVAssetReaderAVAssetWriter對象來轉換和輸出視頻資源數(shù)據(jù)领斥。

- (PHImageRequestID)requestAVAssetForVideo:(PHAsset *)asset options:(nullable PHVideoRequestOptions *)options resultHandler:(void (^)(AVAsset *__nullable asset, AVAudioMix *__nullable audioMix, NSDictionary *__nullable info))resultHandler;
  • asset PHAsset - 將要被加載的視頻資源
  • options PHVideoRequestOptions - 告訴Photos如何處理請求沃暗,并且通知你的應用處理過程和錯誤月洛。
  • resultHandler block - 加載資源數(shù)據(jù)后被調用。
  • asset AVAsset - 提供了訪問視頻資源軌道和數(shù)據(jù)的對象孽锥。關于AVAsset對象的更詳細內容請查看AVFoundation Programming Guide嚼黔。
  • audioMix AVAudioMix - 使用這個對象可以重新排列資源的音頻軌道,編輯在組合中的附加音頻惜辑,或者配置用來輸出資源音頻數(shù)據(jù)的AVAssetReaderOutput對象唬涧。如果這個參數(shù)為nil,那么這個資源使用的是默認音頻組合盛撑。
  • info NSDictionary - 關于請求狀態(tài)的信息爵卒。查看Image Result Info Keys獲取可能出現(xiàn)的鍵合值。

請求代表了視頻資源內容和狀態(tài)的AV Foundation對象撵彻,將被異步加載钓株。
當你調用這個方法,Photos會下載這個視頻數(shù)據(jù)(如果需要的話)并且創(chuàng)建一個AV Foundation對象陌僵。然后調用你的resultHandler回調來提供請求獲取的視頻轴合。
當你想要使用一個資源內容的音頻和視頻軌道工作請使用這個方法。如果你只想要播放資源碗短,請使用- (PHImageRequestID)requestPlayerItemForVideo:(PHAsset *)asset options:(PHVideoRequestOptions *)options resultHandler:(void (^)(AVPlayerItem *playerItem, NSDictionary *info))resultHandler;方法受葛。如果你想要導出資源數(shù)據(jù),請調用- (PHImageRequestID)requestExportSessionForVideo:(PHAsset *)asset options:(PHVideoRequestOptions *)options exportPreset:(NSString *)exportPreset resultHandler:(void (^)(AVAssetExportSession *exportSession, NSDictionary *info))resultHandler;方法。

4. 請求Live Photos

- (PHImageRequestID)requestLivePhotoForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(nullable PHLivePhotoRequestOptions *)options resultHandler:(void (^)(PHLivePhoto *__nullable livePhoto, NSDictionary *__nullable info))resultHandler;

從給定資源中獲取Live Photos总滩。
一張Live Photo是一張圖片纲堵,只有支持的設備才可以拍攝,它包含了捕捉之前和之后時刻的動作和聲音闰渔。就像一個UIImage對象代表了一張隨時可用的圖片席函,一個PHLivePhoto對象代表了一個準備展示的圖片、聲音冈涧、動作數(shù)據(jù)的Live Photo茂附。使用這個方法獲取資源中的Live Photo,獲取之后Photos會調用你的resultHandler回調來返回這個Live Photo督弓,你可以使用PHLivePhotoView來展示Live Photo营曼。

注意
當你要展示Live Photo的動作和聲音內容時使用這個方法。如果你只想展示Live Photo資源的靜止圖片——例如愚隧,當在照片選擇界面加載縮略圖來展示時——請使用- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(PHImageRequestOptions *)options resultHandler:(void (^)(UIImage *result, NSDictionary *info))resultHandler;方法蒂阱。

當你調用這個方法,Photos會加載或生成一個和你提供的大小相近或相等大小的PHLivePhoto對象狂塘。然后調用你的resultHandler回調提供這個圖片录煤。為了更快速的反應你的請求,Photos可能會提供一個略大于給定大小的圖片——因為這張圖片可能已經被緩存或者可以更有效率的生成這張圖片睹耐。根據(jù)你給定的options以及資源的當前狀態(tài)辐赞,Photos可能會從網絡下載這個資源的數(shù)據(jù)部翘。此方法總是異步執(zhí)行硝训。
Photos可能會不止一次的調用你的resultHandler回調。Photos第一次調用回調會提供一個合適的低質量圖片作為臨時展示新思,然后它會去準備一個高質量的圖片窖梁。(如果低質量的圖片立刻可以返回,那么第一次調用回調可能在方法返回一個返回值之前調用夹囚。)當高質量的圖片準備好纵刘,Photos會再次調用你的resultHandler來提供這張圖片。如果圖片管理器已經緩存了請求的圖片的全質量圖片荸哟,Photos只會調用一次你的resultHandler假哎。當Photos提供一個臨時的低質量圖片的時候,resultHandler中的info參數(shù)中的PHImageResultIsDegradedKey鍵會被標示鞍历。

5. 取消一個請求

- (void)cancelImageRequest:(PHImageRequestID)requestID;

取消一個異步請求舵抹。
當你使用- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(PHImageRequestOptions *)options resultHandler:(void (^)(UIImage *result, NSDictionary *info))resultHandler;方法執(zhí)行一個異步請求來請求圖片數(shù)據(jù),或者對一個視頻對象使用上面的“請求視頻對象”中的方法劣砍,圖片管理器都會返回一個對應該請求的數(shù)字標識惧蛹。想要在請求完成之前取消,請調用該方法并傳入對應的數(shù)字標識。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末香嗓,一起剝皮案震驚了整個濱河市迅腔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌靠娱,老刑警劉巖沧烈,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饱岸,居然都是意外死亡掺出,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門苫费,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汤锨,“玉大人,你說我怎么就攤上這事百框∠欣瘢” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵铐维,是天一觀的道長柬泽。 經常有香客問我,道長嫁蛇,這世上最難降的妖魔是什么锨并? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮睬棚,結果婚禮上第煮,老公的妹妹穿的比我還像新娘。我一直安慰自己抑党,他們只是感情好包警,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著底靠,像睡著了一般害晦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上暑中,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天壹瘟,我揣著相機與錄音,去河邊找鬼鳄逾。 笑死稻轨,一個胖子當著我的面吹牛,可吹牛的內容都是我干的严衬。 我是一名探鬼主播澄者,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了粱挡?” 一聲冷哼從身側響起赠幕,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎询筏,沒想到半個月后榕堰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡嫌套,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年逆屡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踱讨。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡魏蔗,死狀恐怖,靈堂內的尸體忽然破棺而出痹筛,到底是詐尸還是另有隱情莺治,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布帚稠,位于F島的核電站谣旁,受9級特大地震影響,放射性物質發(fā)生泄漏滋早。R本人自食惡果不足惜榄审,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望杆麸。 院中可真熱鬧搁进,春花似錦、人聲如沸角溃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽减细。三九已至,卻和暖如春赢笨,著一層夾襖步出監(jiān)牢的瞬間未蝌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工茧妒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萧吠,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓桐筏,卻偏偏與公主長得像纸型,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容

  • 在微博上出現(xiàn)了越來越多的被標記為 Live 的圖片狰腌,這種圖片是一種動圖 LivePhoto除破,長按之后會進行播放。那...
    wvqusrtg閱讀 4,927評論 0 9
  • 一琼腔、 PhotoKit的變量: PHAdjustmentData: When a user edits an as...
    漓汐Arthur閱讀 1,658評論 1 3
  • 相冊適配 前言 由于在iOS8及以后蘋果將原有的操作相冊的ALAssetsLibrary framework替換為...
    wentianen閱讀 1,815評論 0 6
  • 1. Model PHAsset 、PHAssetCollection甥材、PHCollectionList 是Pho...
    RY_zheng閱讀 15,229評論 16 65
  • 最美的景 不是輾轉千里的攝影 也不是畫布上的揮毫潑墨 而是路旁老樹長出的新芽 是破繭而出的蝴蝶 是甩開地平線的紅日...
    風云清閱讀 207評論 0 1