iOS獲取PHAsset
的圖片或視頻資源的本地地址URL
- 項(xiàng)目中,之前使用
UIImagePickerController
來管理圖片,獲取動(dòng)圖后返回選取界面無法正常使用购裙,這個(gè)是iOS系統(tǒng)設(shè)計(jì)UIImagePickerController
的bug,暫時(shí)無法修復(fù),而且蘋果自身也將不再更新維護(hù)這個(gè)API了坯台,所以項(xiàng)目改用PHPickerViewController
管理圖片資源。 - 但是項(xiàng)目需求需要獲取保存圖片的地址瘫寝,但是
PHAsset
本身并不帶URL
,而PHImageManager.default().requestImageData
獲取到info
并不像UIImagePickerController代理方法中imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any])
攜帶imageURL蜒蕾。 - 不過
PHAsset
提供requestContentEditingInput
方法返回的閉包的PHContentEditingInput
的參數(shù)里有fullSizeImageURL
swift代碼:
extension PHAsset {
func getURL(completionHandler: @escaping ((_ responseURL: URL?) -> Void)) {
if self.mediaType == .image {
let options: PHContentEditingInputRequestOptions = PHContentEditingInputRequestOptions()
options.isNetworkAccessAllowed = true //開通網(wǎng)絡(luò)訪問權(quán)限
options.canHandleAdjustmentData = {(_ adjustmeta: PHAdjustmentData) -> Bool in
return true
}
self.requestContentEditingInput(with: options, completionHandler: {(_ contentEditingInput: PHContentEditingInput?, _ info: [AnyHashable: Any]) -> Void in
completionHandler(contentEditingInput?.fullSizeImageURL as URL?)
})
} else if self.mediaType == .video {
let options: PHVideoRequestOptions = PHVideoRequestOptions()
options.version = .original
options.isNetworkAccessAllowed = true
PHImageManager.default().requestAVAsset(forVideo: self, options: options, resultHandler: {(_ asset: AVAsset?, _ audioMix: AVAudioMix?, _ info: [AnyHashable: Any]?) -> Void in
if let urlAsset = asset as? AVURLAsset {
let localVideoUrl: URL = urlAsset.url as URL
completionHandler(localVideoUrl)
} else {
completionHandler(nil)
}
})
}
}
}