HXAssetManager.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. //
  2. // HXAssetManager.h
  3. // HXPhotoPickerExample
  4. //
  5. // Created by Silence on 2020/11/5.
  6. // Copyright © 2020 Silence. All rights reserved.
  7. //
  8. #import <UIKit/UIKit.h>
  9. #import <Photos/Photos.h>
  10. #import "HXPhotoTypes.h"
  11. NS_ASSUME_NONNULL_BEGIN
  12. @class HXAlbumModel;
  13. @interface HXAssetManager : NSObject
  14. /// 获取智能相册
  15. + (PHFetchResult<PHAssetCollection *> *)fetchSmartAlbumsWithOptions:(PHFetchOptions * _Nullable)options;
  16. /// 获取用户创建的相册
  17. + (PHFetchResult<PHAssetCollection *> *)fetchUserAlbumsWithOptions:(PHFetchOptions * _Nullable)options;
  18. /// 获取相机胶卷
  19. + (PHAssetCollection *)fetchCameraRollAlbumWithOptions:(PHFetchOptions * _Nullable)options;
  20. /// 获取所有相册
  21. + (void)enumerateAllAlbumsWithOptions:(PHFetchOptions * _Nullable)options
  22. usingBlock:(void (^)(PHAssetCollection *collection))enumerationBlock;
  23. /// 获取所有相册模型
  24. + (void)enumerateAllAlbumModelsWithOptions:(PHFetchOptions * _Nullable)options
  25. usingBlock:(void (^)(HXAlbumModel *albumModel))enumerationBlock;
  26. /// 是否相机胶卷
  27. + (BOOL)isCameraRollAlbum:(PHAssetCollection *)assetCollection;
  28. /// 获取PHAssetCollection
  29. /// @param localIdentifier 本地标识符
  30. + (PHAssetCollection *)fetchAssetCollectionWithIndentifier:(NSString *)localIdentifier;
  31. /// 获取PHAsset
  32. /// @param localIdentifier 本地标识符
  33. + (PHAsset *)fetchAssetWithLocalIdentifier:(NSString *)localIdentifier;
  34. /// 获取PHAsset
  35. /// @param assetCollection 相册
  36. /// @param options 选项
  37. + (PHFetchResult<PHAsset *> *)fetchAssetsInAssetCollection:(PHAssetCollection *)assetCollection
  38. options:(PHFetchOptions *)options;
  39. /// Asset的原图
  40. + (UIImage *)originImageForAsset:(PHAsset *)asset;
  41. /// 请求视频地址
  42. + (void)requestVideoURL:(PHAsset *)asset
  43. completion:(void (^ _Nullable)(NSURL * _Nullable videoURL))completion;
  44. /// 请求获取image
  45. /// @param asset 需要获取的资源
  46. /// @param targetSize 指定返回的大小
  47. /// @param contentMode 内容模式
  48. /// @param options 选项
  49. /// @param completion 完成请求后调用的 block
  50. + (PHImageRequestID)requestImageForAsset:(PHAsset *)asset
  51. targetSize:(CGSize)targetSize
  52. contentMode:(PHImageContentMode)contentMode
  53. options:(PHImageRequestOptions * _Nullable)options
  54. completion:(void (^ _Nullable)(UIImage *result, NSDictionary<NSString *, id> *info))completion;
  55. /// 异步请求 Asset 的缩略图,不会产生网络请求
  56. /// @param asset 需要获取的资源
  57. /// @param targetWidth 指定返回的缩略图的宽度
  58. /// @param completion 完成请求后调用的 block 会被多次调用
  59. + (PHImageRequestID)requestThumbnailImageForAsset:(PHAsset *)asset
  60. targetWidth:(CGFloat)targetWidth
  61. completion:(void (^ _Nullable)(UIImage *result, NSDictionary<NSString *, id> *info))completion;
  62. /// 异步请求 Asset 的缩略图,不会产生网络请求
  63. /// @param targetWidth 指定返回的缩略图的宽度
  64. /// @param deliveryMode 交付模式
  65. /// @param completion 完成请求后调用的 block
  66. + (PHImageRequestID)requestThumbnailImageForAsset:(PHAsset *)asset
  67. targetWidth:(CGFloat)targetWidth
  68. deliveryMode:(PHImageRequestOptionsDeliveryMode)deliveryMode
  69. completion:(void (^ _Nullable)(UIImage *result, NSDictionary<NSString *, id> *info))completion;
  70. /// 异步请求 Asset 的展示图
  71. /// @param targetSize 指定返回展示的大小
  72. /// @param networkAccessAllowed 允许网络请求
  73. /// @param progressHandler 存在iCloud上并且允许了网络请求才有回调,不在主线程上执行
  74. /// @param completion 完成请求后调用的 block,只会回调一次
  75. + (PHImageRequestID)requestPreviewImageForAsset:(PHAsset *)asset
  76. targetSize:(CGSize)targetSize
  77. networkAccessAllowed:(BOOL)networkAccessAllowed
  78. progressHandler:(PHAssetImageProgressHandler _Nullable)progressHandler
  79. completion:(void (^ _Nullable)(UIImage *result, NSDictionary<NSString *, id> *info))completion;
  80. /// 请求获取imageData
  81. /// @param asset 需要获取的资源
  82. /// @param options 选项
  83. /// @param completion 完成请求后调用的 block
  84. + (PHImageRequestID)requestImageDataForAsset:(PHAsset *)asset
  85. options:(PHImageRequestOptions * _Nullable)options
  86. completion:(void (^ _Nullable)(NSData *imageData, UIImageOrientation orientation, NSDictionary<NSString *, id> *info))completion;
  87. /// 异步请求 Asset 的imageData
  88. /// @param version 请求版本,如果是GIF建议设置PHImageRequestOptionsVersionOriginal
  89. /// @param resizeMode 调整模式
  90. /// @param networkAccessAllowed 允许网络请求
  91. /// @param progressHandler 存在iCloud上并且允许了网络请求才有回调,不在主线程上执行
  92. /// @param completion 完成请求后调用的 block,只回调一次
  93. /// @return 返回请求图片的请求 id
  94. + (PHImageRequestID)requestImageDataForAsset:(PHAsset *)asset
  95. version:(PHImageRequestOptionsVersion)version
  96. resizeMode:(PHImageRequestOptionsResizeMode)resizeMode
  97. networkAccessAllowed:(BOOL)networkAccessAllowed
  98. progressHandler:(PHAssetImageProgressHandler _Nullable)progressHandler
  99. completion:(void (^ _Nullable)(NSData *imageData, UIImageOrientation orientation, NSDictionary<NSString *, id> *info))completion;
  100. /// 请求获取LivePhoto
  101. /// @param targetSize 指定返回的大小
  102. /// @param contentMode 内容模式
  103. /// @param options 选项
  104. /// @param completion 完成请求后调用的 block
  105. + (PHLivePhotoRequestID)requestLivePhotoForAsset:(PHAsset *)asset
  106. targetSize:(CGSize)targetSize
  107. contentMode:(PHImageContentMode)contentMode
  108. options:(PHLivePhotoRequestOptions * _Nullable)options
  109. completion:(void (^ _Nullable)(PHLivePhoto *livePhoto, NSDictionary<NSString *,id> * _Nonnull info))completion;
  110. /// 异步请求 LivePhoto
  111. /// @param targetSize 指定返回的大小
  112. /// @param networkAccessAllowed 允许网络请求
  113. /// @param progressHandler 存在iCloud上并且允许了网络请求才有回调,不在主线程上执行
  114. /// @param completion 完成请求后调用的 block,只会回调一次
  115. + (PHLivePhotoRequestID)requestPreviewLivePhotoForAsset:(PHAsset *)asset
  116. targetSize:(CGSize)targetSize
  117. networkAccessAllowed:(BOOL)networkAccessAllowed
  118. progressHandler:(PHAssetImageProgressHandler _Nullable)progressHandler
  119. completion:(void (^ _Nullable)(PHLivePhoto *livePhoto, NSDictionary<NSString *,id> * _Nonnull info))completion;
  120. /// 请求获取 AVAsset
  121. /// @param options 选项
  122. /// @param completion 完成请求后调用的 block,只会回调一次
  123. + (PHImageRequestID)requestAVAssetForAsset:(PHAsset *)asset
  124. options:(PHVideoRequestOptions * _Nullable)options
  125. completion:(void (^ _Nullable)(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info))completion;
  126. /// 请求获取 AVAsset
  127. /// @param networkAccessAllowed 允许网络请求
  128. /// @param progressHandler 存在iCloud上并且允许了网络请求才有回调,不在主线程上执行
  129. /// @param completion 完成请求后调用的 block,只会回调一次
  130. + (PHImageRequestID)requestAVAssetForAsset:(PHAsset *)asset
  131. networkAccessAllowed:(BOOL)networkAccessAllowed
  132. progressHandler:(PHAssetImageProgressHandler _Nullable)progressHandler
  133. completion:(void (^ _Nullable)(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info))completion;
  134. /// 请求获取 AVPlayerItem
  135. /// @param options 选项
  136. /// @param completion 完成请求后调用的 block,只会回调一次
  137. + (PHImageRequestID)requestPlayerItemForAsset:(PHAsset *)asset
  138. options:(PHVideoRequestOptions * _Nullable)options
  139. completion:(void (^ _Nullable)(AVPlayerItem * _Nullable playerItem, NSDictionary * _Nullable info))completion;
  140. /// 请求获取 AVPlayerItem
  141. /// @param networkAccessAllowed 允许网络请求
  142. /// @param progressHandler 存在iCloud上并且允许了网络请求才有回调,不在主线程上执行
  143. /// @param completion 完成请求后调用的 block,只会回调一次
  144. + (PHImageRequestID)requestPlayerItemForAsset:(PHAsset *)asset
  145. networkAccessAllowed:(BOOL)networkAccessAllowed
  146. progressHandler:(PHAssetImageProgressHandler _Nullable)progressHandler
  147. completion:(void (^ _Nullable)(AVPlayerItem * _Nullable playerItem, NSDictionary * _Nullable info))completion;
  148. /// 请求获取 AVAssetExportSession
  149. /// @param options 选项
  150. /// @param exportPreset 导出质量
  151. /// @param completion 完成请求后调用的 block,只会回调一次
  152. + (PHImageRequestID)requestExportSessionForAsset:(PHAsset *)asset
  153. options:(PHVideoRequestOptions * _Nullable)options
  154. exportPreset:(NSString *)exportPreset
  155. completion:(void (^ _Nullable)(AVAssetExportSession * _Nullable exportSession, NSDictionary * _Nullable info))completion;
  156. /// 请求获取 AVAssetExportSession
  157. /// @param exportPreset 导出质量
  158. /// @param networkAccessAllowed 允许网络请求
  159. /// @param progressHandler 存在iCloud上并且允许了网络请求才有回调,不在主线程上执行
  160. /// @param completion 完成请求后调用的 block,只会回调一次
  161. + (PHImageRequestID)requestExportSessionForAsset:(PHAsset *)asset
  162. exportPreset:(NSString *)exportPreset
  163. networkAccessAllowed:(BOOL)networkAccessAllowed
  164. progressHandler:(PHAssetImageProgressHandler _Nullable)progressHandler
  165. completion:(void (^ _Nullable)(AVAssetExportSession * _Nullable exportSession, NSDictionary * _Nullable info))completion;
  166. /// 获取视频地址,可压缩
  167. /// @param asset 对应的 PHAsset 对象
  168. /// @param fileURL 指定导出地址
  169. /// @param exportPreset 导出视频分辨率
  170. /// @param videoQuality 导出视频质量[0-10]
  171. /// @param resultHandler 导出结果
  172. + (void)requestVideoURLForAsset:(PHAsset *)asset
  173. toFile:(NSURL * _Nullable)fileURL
  174. exportPreset:(HXVideoExportPreset)exportPreset
  175. videoQuality:(NSInteger)videoQuality
  176. resultHandler:(void (^ _Nullable)(NSURL * _Nullable))resultHandler;
  177. /// 获取是否成功完成
  178. /// @param info 获取时返回的信息
  179. + (BOOL)downloadFininedForInfo:(NSDictionary *)info;
  180. /// 资源是否在iCloud上
  181. /// @param info 获取时返回的信息
  182. + (BOOL)isInCloudForInfo:(NSDictionary *)info;
  183. @end
  184. NS_ASSUME_NONNULL_END