iOS 获取原图:ALAsset 与 PHAsset 的使用指南
iOS 获取原图:ALAsset 与 PHAsset 的使用指南
获取照片的原图是 iOS 开发中常见的需求,本文将介绍两种常用的方法:使用 ALAsset 和 PHAsset。
1. 使用 ALAsset 获取原图
ALAsset 是 iOS 9 之前的 API,用于获取相册中的照片和视频。
代码示例:
#import <AssetsLibrary/AssetsLibrary.h>
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library assetForURL:assetURL resultBlock:^(ALAsset *asset) {
// 获取到 ALAsset 对象
if (asset) {
// 获取 ALAsset 的原图
ALAssetRepresentation *representation = [asset defaultRepresentation];
CGImageRef imageRef = [representation fullResolutionImage];
UIImage *image = [UIImage imageWithCGImage:imageRef];
// 在这里可以使用获取到的原图 image
}
} failureBlock:^(NSError *error) {
// 获取 ALAsset 对象失败
}];
-
首先,需要导入
ALAssetsLibrary和ALAssetRepresentation类。 -
然后,使用
ALAssetsLibrary来获取ALAsset对象。 -
在
resultBlock中,可以通过ALAsset的defaultRepresentation方法获取到ALAssetRepresentation对象,然后使用fullResolutionImage方法获取到原图的CGImageRef,最后使用imageWithCGImage方法将CGImageRef转化为UIImage对象。
2. 使用 PHAsset 获取原图
PHAsset 是 iOS 9 及以后版本推出的新的 API,用于访问照片库。与 ALAsset 相比,PHAsset 具有以下优势:
- 更高效:PHAsset 的操作速度更快,内存占用更低。
- 更灵活:PHAsset 支持更多功能,例如获取照片的 EXIF 信息、编辑照片等。
代码示例:
#import <Photos/Photos.h>
PHImageManager *manager = [PHImageManager defaultManager];
[manager requestImageForAsset:asset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeDefault options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
// 获取到原图 image
if (result) {
// 在这里可以使用获取到的原图 image
}
}];
-
首先,需要导入
Photos/Photos.h类。 -
然后,使用
PHImageManager获取PHAsset对象。 -
最后,使用
requestImageForAsset方法获取UIImage对象。
总结
在 iOS 9 及以后版本,推荐使用 PHAsset 来获取原图,因为它具有更高的效率和更灵活的功能。ALAsset 仍然可以使用,但功能比较有限,而且在未来的 iOS 版本中可能不再被支持。
原文地址: https://www.cveoy.top/t/topic/pmvq 著作权归作者所有。请勿转载和采集!