JXHPhotoManager.h 4.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. //
  2. // JXHPhotoManager.h
  3. // 我的社保
  4. //
  5. // Created by shanp on 2020/9/15.
  6. //
  7. #import <Foundation/Foundation.h>
  8. #import <AssetsLibrary/AssetsLibrary.h>
  9. #import <Photos/Photos.h>
  10. #import "JXHPhotoAlbumConfiguration.h"
  11. @class JXHPhotoAlbum;
  12. NS_ASSUME_NONNULL_BEGIN
  13. @interface JXHPhotoManager : NSObject
  14. @property (nonatomic, strong) PHAsset *jxh_phAsset;
  15. @property (nonatomic, strong, nullable) AVPlayerItem *jxh_playItem;
  16. @property (nonatomic, assign) NSUInteger jxh_index;
  17. - (void)getCover;
  18. /// Asset 的原图(包含系统相册“编辑”功能处理后的效果)
  19. - (nullable UIImage *)originImage;
  20. /**
  21. * 异步请求 Asset 的原图,包含了系统照片“编辑”功能处理后的效果(剪裁,旋转和滤镜等),可能会有网络请求
  22. *
  23. * @param completion 完成请求后调用的 block,参数中包含了请求的原图以及图片信息,在 iOS 8.0 或以上版本中,
  24. * 这个 block 会被多次调用,其中第一次调用获取到的尺寸很小的低清图,然后不断调用,直接获取到高清图,
  25. * 获取到高清图后 QMUIAsset 会缓存起这张高清图,这时 block 中的第二个参数(图片信息)返回的为 nil。
  26. * @param phProgressHandler 处理请求进度的 handler,不在主线程上执行,在 block 中修改 UI 时注意需要手工放到主线程处理。
  27. *
  28. * @wraning iOS 8.0 以下中并没有异步请求预览图的接口,因此实际上为同步请求,这时 block 中的第二个参数(图片信息)返回的为 nil。
  29. */
  30. - (void)requestOriginImageWithCompletion:(void (^_Nullable)(UIImage *_Nullable, NSDictionary *_Nullable))completion withProgressHandler:(nullable PHAssetImageProgressHandler)phProgressHandler;
  31. /**
  32. * Asset 的缩略图
  33. *
  34. * @param size 指定返回的缩略图的大小,仅在 iOS 8.0 及以上的版本有效,其他版本则调用 ALAsset 的接口由系统返回一个合适当前平台的图片
  35. *
  36. * @return Asset 的缩略图
  37. */
  38. - (nullable UIImage *)thumbnailWithSize:(CGSize)size contentMode:(JXHImageContentMode)imageContentMode;
  39. /**
  40. * 异步请求 Asset 的缩略图,不会产生网络请求
  41. *
  42. * @param size 指定返回的缩略图的大小,仅在 iOS 8.0 及以上的版本有效,其他版本则调用 ALAsset 的接口由系统返回一个合适当前平台的图片
  43. * @param completion 完成请求后调用的 block,参数中包含了请求的缩略图以及图片信息,在 iOS 8.0 或以上版本中,这个 block 会被多次调用,
  44. * 其中第一次调用获取到的尺寸很小的低清图,然后不断调用,直接获取到高清图,获取到高清图后 QMUIAsset 会缓存起这张高清图,
  45. * 这时 block 中的第二个参数(图片信息)返回的为 nil。
  46. */
  47. - (void)requestThumbnailImageWithSize:(CGSize)size contentMode:(JXHImageContentMode)imageContentMode completion:(void (^_Nullable)(UIImage *_Nullable, NSDictionary *_Nullable))completion;
  48. /**
  49. * Asset 的预览图
  50. *
  51. * @warning 仿照 ALAssetsLibrary 的做法输出与当前设备屏幕大小相同尺寸的图片,如果图片原图小于当前设备屏幕的尺寸,则只输出原图大小的图片
  52. * @return Asset 的全屏图
  53. */
  54. - (nullable UIImage *)previewImageWithSize:(CGSize)size;
  55. /**
  56. * 异步请求 Asset 的预览图,可能会有网络请求
  57. *
  58. * @param completion 完成请求后调用的 block,参数中包含了请求的预览图以及图片信息,在 iOS 8.0 或以上版本中,
  59. * 这个 block 会被多次调用,其中第一次调用获取到的尺寸很小的低清图,然后不断调用,直接获取到高清图,
  60. * 获取到高清图后 QMUIAsset 会缓存起这张高清图,这时 block 中的第二个参数(图片信息)返回的为 nil。
  61. * @param phProgressHandler 处理请求进度的 handler,不在主线程上执行,在 block 中修改 UI 时注意需要手工放到主线程处理。
  62. *
  63. * @wraning iOS 8.0 以下中并没有异步请求预览图的接口,因此实际上为同步请求,这时 block 中的第二个参数(图片信息)返回的为 nil。
  64. */
  65. - (void)requestPreviewImageWithSize:(CGSize)size completion:(void (^_Nullable)(UIImage *_Nullable, NSDictionary *_Nullable))completion progressHandler:(PHAssetImageProgressHandler)phProgressHandler;
  66. - (void)requestVideoWithCompletion:(void (^_Nullable)(AVPlayerItem *_Nullable, NSDictionary *_Nullable))completion progressHandler:(nullable PHAssetVideoProgressHandler)progressHandler;
  67. - (void)cleanCache;
  68. @end
  69. NS_ASSUME_NONNULL_END