gpt4 book ai didi

ios - PHImageManager.requestImageForAsset 在为视频创建缩略图时返回 nil

转载 作者:IT王子 更新时间:2023-10-29 05:25:04 26 4
gpt4 key购买 nike

对于某些视频,requestImageForAsset 以 nil 的 UIImage 完成。对于其他视频,它工作正常,我还没有弄清楚为什么。

func createThumbnailForVideo(video: PHAsset) -> Future<NSURL> {
let promise = Promise<NSURL>()
let options = PHImageRequestOptions()
options.synchronous = true

imageManager.requestImageForAsset(video, targetSize: CGSizeMake(640, 640), contentMode: .AspectFill, options: options) { (image:UIImage!, info) -> Void in

if image == nil {
println("Error: Couldn't create thumbnail for video")
promise.error(MyErrors.videoThumb())
} else {
if let thumbURL = self.savePhotoAsTemporaryFile(image) {
promise.success(thumbURL)
} else {
promise.error(MyErrors.videoThumb())
}
}
}

return promise.future
}

我也得到了请求的信息,但我不知道如何解释这些信息:

[PHImageResultIsDegradedKey: 0, PHImageResultWantedImageFormatKey: 4037, PHImageResultIsPlaceholderKey: 0, PHImageResultIsInCloudKey: 0, PHImageResultDeliveredImageFormatKey: 9999]

最佳答案

我今天遇到了同样的问题。对我来说,我必须在必要时添加下载图像的选项。我认为图像管理器有可用的缩略图大小版本,但由于我不允许它从网络中获取实际图像,它会在第二次回调时返回 nil。所以为了解决这个问题,我创建了一个 PHImageRequestOptions() 对象,如下所示:

var options = PHImageRequestOptions()
options.networkAccessAllowed = true

然后将其作为参数与您的请求一起发送:

PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: size, contentMode: PHImageContentMode.AspectFill, options: options) { (image, info) -> Void in
if (image != nil) {
cell.imageView.image = image
}
}

一旦我这样做了,第二个回调图像就不是零了。我认为防止出现 nil 图像仍然是一个好主意,因此您不要将 ImageView 的图像设置为 nil。我不认为你可以假设图像会一直存在。希望这对您有所帮助!

编辑:只是为了澄清。在我的例子中,对于每个请求,闭包都会被调用两次。第一次图像不是零,第二次是。我认为这是因为缩略图大小的版本可用,但没有完整尺寸。它需要网络访问权限才能获取全尺寸图像。

关于ios - PHImageManager.requestImageForAsset 在为视频创建缩略图时返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28369400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com