iOS中获取系统相册中的图片实例
程序员文章站
2023-12-19 13:40:58
本文介绍了ios中获取系统相册中的图片,在很多应用中都能用到,可以获取单张图片,也可以同时获取多张图片,废话不多说了,看下面吧。
一.获取单张图片
思路:...
本文介绍了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); }]; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。