iOS中擷取系統相簿中的圖片執行個體_IOS

來源:互聯網
上載者:User

本文介紹了iOS中擷取系統相簿中的圖片,在很多應用中都能用到,可以擷取單張圖片,也可以同時擷取多張圖片,廢話不多說了,看下面吧。

一.擷取單張圖片

思路:

1.利用UIImagePickerController可以從系統內建的App(照片\相機)中獲得圖片

2.設定代理,遵守代理協議

注意這個UIImagePickerController類比較特殊,需要遵守兩個代理協議

@interface ViewController () <UIImagePickerControllerDelegate, UINavigationControllerDelegate>

3.實現代理的方法didFinishPickingMediaWithInfo

- (void)getImageFromIpc{  // 1.判斷相簿是否可以開啟  if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) return;  // 2. 建立圖片選擇控制器  UIImagePickerController *ipc = [[UIImagePickerController alloc] init];  /**   typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) {   UIImagePickerControllerSourceTypePhotoLibrary, // 相簿   UIImagePickerControllerSourceTypeCamera, // 用相機拍攝擷取   UIImagePickerControllerSourceTypeSavedPhotosAlbum // 相簿   }   */  // 3. 設定開啟照片相簿類型(顯示所有相簿)   ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;  // ipc.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;  // 照相機  // ipc.sourceType = UIImagePickerControllerSourceTypeCamera;  // 4.設定代理  ipc.delegate = self;  // 5.modal出這個控制器  [self presentViewController:ipc animated:YES completion:nil];}#pragma mark -- <UIImagePickerControllerDelegate>--// 擷取圖片後的操作- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{  // 銷毀控制器  [picker dismissViewControllerAnimated:YES completion:nil];  // 設定圖片  self.imageView.image = info[UIImagePickerControllerOriginalImage];}

二.擷取多張圖片

思路:

  • 匯入標頭檔#import <Photos/Photos.h>
  • PHAsset : 一個資源, 比如一張圖片\一段視頻
  • PHAssetCollection : 一個相簿
  • PHImageManager 圖片管理者,是單例,發送請求才能從asset擷取圖片
  • PHImageRequestOptions圖片請求選項
  • 注意:這個類是iOS8開始推廣,iOS9開始廢棄之前的方法
  • 系統適配iOS8之前,用下面這個庫裡面的API
#import <AssetsLibrary/AssetsLibrary.h>

1.獲得所有相簿的原圖

- (void)getOriginalImages{  // 獲得所有的自訂相簿  PHFetchResult<PHAssetCollection *> *assetCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];  // 遍曆所有的自訂相簿  for (PHAssetCollection *assetCollection in assetCollections) {    [self enumerateAssetsInAssetCollection:assetCollection original:YES];  }  // 獲得相機菲林  PHAssetCollection *cameraRoll = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:nil].lastObject;  // 遍曆相機菲林,擷取大圖  [self enumerateAssetsInAssetCollection:cameraRoll original:YES];}

2.獲得所有相簿中的縮圖

- (void)getThumbnailImages{  // 獲得所有的自訂相簿  PHFetchResult<PHAssetCollection *> *assetCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];  // 遍曆所有的自訂相簿  for (PHAssetCollection *assetCollection in assetCollections) {    [self enumerateAssetsInAssetCollection:assetCollection original:NO];  }  // 獲得相機菲林  PHAssetCollection *cameraRoll = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:nil].lastObject;  [self enumerateAssetsInAssetCollection:cameraRoll original:NO];}

3.遍曆相簿

/** * 遍曆相簿中的所有圖片 * @param assetCollection 相簿 * @param original    是否要原圖 */- (void)enumerateAssetsInAssetCollection:(PHAssetCollection *)assetCollection original:(BOOL)original{  NSLog(@"相簿名:%@", assetCollection.localizedTitle);  PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];  // 同步獲得圖片, 只會返回1張圖片  options.synchronous = YES;  // 獲得某個相簿中的所有PHAsset對象  PHFetchResult<PHAsset *> *assets = [PHAsset fetchAssetsInAssetCollection:assetCollection options:nil];  for (PHAsset *asset in assets) {    // 是否要原圖    CGSize size = original ? CGSizeMake(asset.pixelWidth, asset.pixelHeight) : CGSizeZero;    // 從asset中獲得圖片    [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:size contentMode:PHImageContentModeDefault options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {      NSLog(@"%@", result);    }];  }}

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.