photos框架
Photos 框架是苹果公司提供的一个用于访问和管理 iOS 和 macOS 上的照片和视频的框架。它提供了一套 API,可以让开发者在应用程序中访问用户的照片和视频,并对它们进行处理和编辑。
Photos 框架的主要功能包括:
- 访问照片和视频:开发者可以使用 Photos 框架来访问用户设备上的照片和视频。
- 管理相册:开发者可以使用 Photos 框架来创建、修改和删除用户的相册。
- 编辑照片和视频:开发者可以使用 Photos 框架来编辑照片和视频,包- 括调整色彩、亮度、对比度等参数,以及添加滤镜、裁剪、旋转等操作。
- 查询和过滤照片和视频:开发者可以使用 Photos 框架来查询和过滤照片和视频,以便根据不同的条件来检索用户的媒体资料。
使用 Photos 框架的优点是,它提供了一套非常简单易用的 API,可以让开发者很容易地访问和处理用户的照片和视频。同时,Photos 框架也支持对媒体资料进行高效的存储和管理,可以保证应用程序在处理大量媒体资料时的性能和稳定性。
操作步骤
1. 导入Photos框架
#import <Photos/Photos.h>
2. 在info添加Privacy - Photo Library Usage Description键。
- 打开info文件。
- 添加空白行,在空白行输入Privacy - Photo Library Usage Description。
3. 使用PHPhotoLibrary确认用户授权
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
switch (status) {
case PHAuthorizationStatusAuthorized:
// 用户已授权,可以访问相册或照片库数据
// 在此添加相关操作代码
self.assets = [self getAllAssetInPhotoAblumWithAscending:YES];
self.imageArray = [self analysisAssets:self.assets];
break;
case PHAuthorizationStatusDenied:
case PHAuthorizationStatusRestricted:
// 用户已拒绝或受限制,无法访问相册或照片库数据
// 在此添加相关操作代码
break;
case PHAuthorizationStatusNotDetermined:
// 用户尚未做出选择,可以继续请求授权
// 在此添加相关操作代码
break;
default:
break;
}
}];
4. 获取相册内所有内容
PHAsset类
PHAsset 是 Photos 框架中表示用户照片或视频的对象。它代表了用户在设备上的照片和视频资源,包括图片和 Live Photo、视频、GIF 图片等。
PHFetchOptions类
PHFetchOptions 是 Photos 框架中用来配置和控制数据查询的选项类。它可以用来设置查询的排序方式、过滤条件、分页信息等。
PHFetchOptions 提供了多种配置选项,例如:
sortDescriptors: 用来设置查询结果的排序方式,可以按照创建日期、修改日期、文件名等进行排序。
predicate: 用来设置查询结果的过滤条件,可以根据媒体类型、创建日期、修改日期、位置信息等进行过滤。
includeHiddenAssets: 用来控制是否包含隐藏的媒体资源。
includeAllBurstAssets: 用来控制是否包含连拍照片中的所有资源。
includeAssetSourceTypes: 用来控制查询的媒体资源类型,例如相册、iCloud 等。
fetchLimit: 用来设置查询结果的最大数量。
fetchOffset: 用来设置查询结果的起始位置。
操作
NSMutableArray<PHAsset*>* assets = [[NSMutableArray alloc] init];
PHFetchOptions* option = [[PHFetchOptions alloc] init];
// 设置查询结果按照片创建时间排序
// ascending为YES升序排序,NO降序排序
option.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:ascending]];
// result为查询结果
// type 指定要获取的媒体类型,可选值为
/*PHAssetMediaTypeImage: 表示要获取图片资源。
PHAssetMediaTypeVideo: 表示要获取视频资源。
PHAssetMediaTypeAudio: 表示要获取音频资源。
PHAssetMediaTypeUnknown: 表示要获取未知类型的资源。*/
PHFetchResult* result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:option];
// 结果
[result enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
PHAsset* asset = (PHAsset*)obj;
[assets addObject:asset];
}];
return assets;
5. 解析数据
PHImageRequestOptions
PHImageRequestOptions 是 Photos 框架中的一个类,用于配置获取图片时的选项。它提供了一系列属性,包括以下几个比较常用的:
resizeMode: 图片缩放模式。默认值为 .fast,表示尽可能快地返回一张图像,不管质量如何。其他选项还包括 .exact(尽可能返回一张质量较高的图像)、.none(不进行缩放,返回原始大小的图像)等。
deliveryMode: 图片交付模式。默认值为 .opportunistic,表示尽可能快地返回一张图像,但如果此时需要等待更长时间才能获取高质量的图像,也会继续等待。其他选项还包括 .highQualityFormat(返回最高质量的图像,但可能需要等待较长时间)等。
isSynchronous: 是否同步获取图像。默认值为 false,表示异步获取图像。如果将该属性设置为 true,则会阻塞当前线程,直到获取到图像或者发生错误为止。
- (NSArray*) analysisAssets:(NSArray<PHAsset*>*)assets {
NSMutableArray * imageArray = [[NSMutableArray alloc] init];
PHImageRequestOptions* option = [[PHImageRequestOptions alloc] init];
option.resizeMode = PHImageRequestOptionsResizeModeFast;
option.networkAccessAllowed = YES;
CGFloat size = ([UIScreen mainScreen].bounds.size.width - 40) / 3;
for (PHAsset* asset in assets) {
// targetSize 图片目标大小,当目标大小为PHImageManagerMaximumSize时,会请求原始大小的图片。
// contentMode:
/*PHImageContentModeAspectFit: 将图像的内容缩放到目标大小以内,同时保持图像的长宽比。
PHImageContentModeAspectFill: 将图像的内容裁剪到目标大小以内,同时保持图像的长宽比。
PHImageContentModeDefault: 根据图像的原始尺寸和目标大小,自动选择AspectFit或AspectFill模式。*/
[[PHCachingImageManager defaultManager] requestImageForAsset:asset targetSize:CGSizeMake(size, size) contentMode:PHImageContentModeAspectFit options:option resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
[imageArray addObject:result];
}];
}
return imageArray;
}