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 对象失败
}];
  1. 首先,需要导入 ALAssetsLibraryALAssetRepresentation 类。

  2. 然后,使用 ALAssetsLibrary 来获取 ALAsset 对象。

  3. resultBlock 中,可以通过 ALAssetdefaultRepresentation 方法获取到 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
    }
}];
  1. 首先,需要导入 Photos/Photos.h 类。

  2. 然后,使用 PHImageManager 获取 PHAsset 对象。

  3. 最后,使用 requestImageForAsset 方法获取 UIImage 对象。

总结

在 iOS 9 及以后版本,推荐使用 PHAsset 来获取原图,因为它具有更高的效率和更灵活的功能。ALAsset 仍然可以使用,但功能比较有限,而且在未来的 iOS 版本中可能不再被支持。


原文地址: https://www.cveoy.top/t/topic/pmvq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录