相册照片和视频下载

相册、实时照片、视频获取。
图片和视频的获取需要通过PHImageManager获取

PHImageManager在框架中是个单例对象,用[PHImageManager defaultManager]获取,它提供了加载图片和视频的方法。

比如:图像请求是通过 requestImageForAsset(…) 方法派发的。
这些方法的参数:

  • 一个 PHAsset对象,
  • PHImageRequestOptions 参数对象:可以设置返回图像的大小和图像的其它可选项
  • 结果回调 (result handler)。

拉取资源请求参数PHImageRequestOptions

1.1 isSynchronous。是否同步处理一个图像请求。默认为NO
/*
- 1、如果`synchronous `属性为YES,一定为同步请求。resultHandler只会执行一次,并且返回高质量的图片。
-  2、如果`synchronous `属性为NO,不一定时异步。resultHandler是否会被多次调用取决于deliveryMode属性:
- .HighQualityFormat ,resultHandler调用一次,框架只返回高质量图。
- .FastFormat,resultHandler也只被调用一次,最快速的得到一个图像结果,可能会牺牲图像质量。
- .Opportunistic,resultHandler会被调用多次,会先提供低质量的图像以临时显示,随后会将指定尺寸的图像返回。如果指定尺寸的高质量的图像有缓存,那么直接返回高质量的图像。
*/

1.2 PHImageRequestOptionsDeliveryMode。

//请求的图像质量和交付优先级。只用这个属性将告诉Photos要快速提供图像(可能牺牲图像质量)、提供高质量图像(可能牺牲速度)、系统自动选择

typedef NS_ENUM(NSInteger, PHImageRequestOptionsDeliveryMode) {
PHImageRequestOptionsDeliveryModeOpportunistic = 0,  // 为了平衡图像质量和响应速度,Photos会提供一个或者多个结果    
PHImageRequestOptionsDeliveryModeHighQualityFormat = 1, // 只提供高质量图像、无论他需要多少时间加载 
PHImageRequestOptionsDeliveryModeFastFormat = 2 // 最快速的得到一个图像结果,可能会牺牲图像质量。
};
1.3 PHImageRequestOptionsVersion。

//请求的图片版本。使用这个属性请求图片的不带编辑的版本,或则请求一个高质量的原始数据。

typedef NS_ENUM(NSInteger, PHImageRequestOptionsVersion) {
PHImageRequestOptionsVersionCurrent = 0,  // 图片的最新版本(包括所有编辑版本)
PHImageRequestOptionsVersionUnadjusted, // 原版、无任何编辑版本
PHImageRequestOptionsVersionOriginal      // 原始的高保真的版本
} PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);

1.4 PHImageRequestOptionsResizeMode。
// 对请求的图像怎样缩放。使用此属性可选择在请求图像数据时将图像与目标大小如何适应。
typedef NS_ENUM(NSInteger, PHImageRequestOptionsResizeMode) {
PHImageRequestOptionsResizeModeNone = 0, // 不做任何调整
PHImageRequestOptionsResizeModeFast,       // 最快速的调整图像大小,有可能比给定大小略大
PHImageRequestOptionsResizeModeExact,    // 保证与给定大小相等。如果使用normalizedCropRect属性,则必须指定为该模式。
};

1.5 normalizedCropRect。

// normalizedCropRect。是否对原始图像进行裁剪。如果要裁剪图像,请在坐标空间内指定要裁剪的区域,在坐标系内{0,0}点在图像左上角,{1.0,1.0}点在图像的右下角。这个属性默认值为CGRectZero,代表不裁剪,如果你指定了裁剪,那么必须对resizeMode属性设置为`PHImageRequestOptionsResizeModeExact `

获取图片

 /*
     下载照片原图
     PHAsset:照片元数据
     options:图片信息配置
     resultHandler:返回结果
     */
    @objc open class func requestImageData(for asset: PHAsset, options: PHImageRequestOptions?, resultHandler: @escaping (Data?, String?, UIImage.Orientation, [AnyHashable: Any]?) -> Void, progressHandler:@escaping (Double) -> Void) -> PHImageRequestID {
        var requestOptions = options
        // 配置请求照片信息
        if requestOptions == nil {
            requestOptions = PHImageRequestOptions()
            requestOptions?.deliveryMode = .highQualityFormat
            requestOptions?.isNetworkAccessAllowed = true
        }
        
        let progressHandler: PHAssetVideoProgressHandler = { (progress, error, stop, info) in
            if let b = info?[PHImageCancelledKey] as? NSNumber, b.boolValue {
                return
            }
            if error != nil {
                return
            }
            progressHandler(progress)
        }
        requestOptions?.progressHandler = progressHandler
        return PHImageManager.default().requestImageData(for: asset, options: requestOptions, resultHandler: resultHandler)
    }

获取视频


  /**
     获取视频
     */
    open class func requestAVAssetAsset(forVideo asset: PHAsset, options: PHVideoRequestOptions?, resultHandler: @escaping (AVAsset?, AVAudioMix?, [AnyHashable: Any]?) -> Void, progressHandler:@escaping (Double) -> Void) -> PHImageRequestID {
        var requestOptions = options
        // 获取视频请求信息
        if requestOptions == nil {
            requestOptions = PHVideoRequestOptions()
            requestOptions?.deliveryMode = .automatic
            requestOptions?.isNetworkAccessAllowed = true
            
        }
        // 获取进度
        let progressHandler: PHAssetVideoProgressHandler = { (progress, error, stop, info) in
            if error != nil {
                return
            }
            progressHandler(progress)
        }
        requestOptions?.progressHandler = progressHandler
        return PHImageManager.default().requestAVAsset(forVideo: asset, options: requestOptions, resultHandler: resultHandler)
    }

获取实时照片(livePhoto)信息


PHImageManager.default().requestLivePhoto(for: asset, targetSize: thumbnailSize, contentMode: .aspectFill, options: nil, resultHandler: { (livePhoto, info) in

})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值