您的位置:首页 > 移动开发

iOS--app自定义相册--从自定义的相册中获取图片

2017-01-23 13:25 483 查看

一.获取单张图片

思路:

1.利用UIImagePickerController可以从系统自带的App(照片\相机)中获得图片

2.设置代理,遵守代理协议

注意
这个
UIImagePickerController
类比较特殊,需要遵守两个代理协议
@interfaceViewController()<UIImagePickerControllerDelegate,UINavigationControllerDelegate>


3.实现代理的方法
didFinishPickingMediaWithInfo


-(void)getImageFromIpc
{
//1.判断相册是否可以打开
if(![UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])return;
//2.创建图片选择控制器
UIImagePickerController*ipc=[[UIImagePickerControlleralloc]init];
/**
typedefNS_ENUM(NSInteger,UIImagePickerControllerSourceType){
UIImagePickerControllerSourceTypePhotoLibrary,//相册
UIImagePickerControllerSourceTypeCamera,//用相机拍摄获取
UIImagePickerControllerSourceTypeSavedPhotosAlbum//相簿
}
*/
//3.设置打开照片相册类型(显示所有相簿)
ipc.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;
//ipc.sourceType=UIImagePickerControllerSourceTypeSavedPhotosAlbum;
//照相机
//ipc.sourceType=UIImagePickerControllerSourceTypeCamera;
//4.设置代理
ipc.delegate=self;
//5.modal出这个控制器
[selfpresentViewController:ipcanimated:YEScompletion:nil];
}

#pragmamark--<UIImagePickerControllerDelegate>--
//获取图片后的操作
-(void)imagePickerController:(UIImagePickerController*)pickerdidFinishPickingMediaWithInfo:(NSDictionary<NSString*,id>*)info
{
//销毁控制器
[pickerdismissViewControllerAnimated:YEScompletion: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=[PHAssetCollectionfetchAssetCollectionsWithType:PHAssetCollectionTypeAlbumsubtype:PHAssetCollectionSubtypeAlbumRegularoptions:nil];
//遍历所有的自定义相簿
for(PHAssetCollection*assetCollectioninassetCollections){
[selfenumerateAssetsInAssetCollection:assetCollectionoriginal:YES];
}

//获得相机胶卷
PHAssetCollection*cameraRoll=[PHAssetCollectionfetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbumsubtype:PHAssetCollectionSubtypeSmartAlbumUserLibraryoptions:nil].lastObject;
//遍历相机胶卷,获取大图
[selfenumerateAssetsInAssetCollection:cameraRolloriginal:YES];
}

2.获得所有相簿中的缩略图

-(void)getThumbnailImages
{
//获得所有的自定义相簿
PHFetchResult<PHAssetCollection*>*assetCollections=[PHAssetCollectionfetchAssetCollectionsWithType:PHAssetCollectionTypeAlbumsubtype:PHAssetCollectionSubtypeAlbumRegularoptions:nil];
//遍历所有的自定义相簿
for(PHAssetCollection*assetCollectioninassetCollections){
[selfenumerateAssetsInAssetCollection:assetCollectionoriginal:NO];
}
//获得相机胶卷
PHAssetCollection*cameraRoll=[PHAssetCollectionfetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbumsubtype:PHAssetCollectionSubtypeSmartAlbumUserLibraryoptions:nil].lastObject;
[selfenumerateAssetsInAssetCollection:cameraRolloriginal:NO];
}

3.遍历相册

/**
*遍历相簿中的所有图片
*@paramassetCollection相簿
*@paramoriginal是否要原图
*/
-(void)enumerateAssetsInAssetCollection:(PHAssetCollection*)assetCollectionoriginal:(BOOL)original
{
NSLog(@"相簿名:%@",assetCollection.localizedTitle);

PHImageRequestOptions*options=[[PHImageRequestOptionsalloc]init];
//同步获得图片,只会返回1张图片
options.synchronous=YES;

//获得某个相簿中的所有PHAsset对象
PHFetchResult<PHAsset*>*assets=[PHAssetfetchAssetsInAssetCollection:assetCollectionoptions:nil];
for(PHAsset*assetinassets){
//是否要原图
CGSizesize=original?CGSizeMake(asset.pixelWidth,asset.pixelHeight):CGSizeZero;

//从asset中获得图片
[[PHImageManagerdefaultManager]requestImageForAsset:assettargetSize:sizecontentMode:PHImageContentModeDefaultoptions:optionsresultHandler:^(UIImage*_Nullableresult,NSDictionary*_Nullableinfo){
NSLog(@"%@",result);
}];
}
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: