【发布时间】:2016-12-09 09:02:59
【问题描述】:
我正在开发一个使用 AVAssetImageGenerator.generateCGImagesAsynchronouslyForTimes 的 OS X 应用程序,它通常可以正常工作。然而,有时我得到的缩略图只包含前几行像素,其余的都是绿色的,有时图像会是不同深浅的绿色。很难追踪,因为它不会一直发生,但当它发生时,大约一半的缩略图会受到影响。这是我希望看到的图像:
但这种情况经常发生:
这是我用来生成缩略图的代码:
let assetGenerator = AVAssetImageGenerator(asset: AVURLAsset(URL: url))
assetGenerator.appliesPreferredTrackTransform = true
let time = CMTime(seconds: 0, preferredTimescale: 30)
let handler: AVAssetImageGeneratorCompletionHandler = { _, image, _, res, error in
defer { dispatch_group_leave(self.waitForThumbnail!) }
guard let image = image where res == .Succeeded else {
if let error = error { print(error) }
return
}
let s = CGSize(width: CGImageGetWidth(image), height: CGImageGetHeight(image))
self.thumbnail = NSImage(CGImage: image, size: s)
}
waitForThumbnail = dispatch_group_create()
dispatch_group_enter(waitForThumbnail!)
assetGenerator.maximumSize = maxThumbnailSize
assetGenerator.generateCGImagesAsynchronouslyForTimes([NSValue(CMTime: time)], completionHandler: handler)
这就是我检索缩略图的方式:
dispatch_group_wait(file.waitForThumbnail!, DISPATCH_TIME_FOREVER)
dispatch_async(dispatch_get_main_queue()) {
self.imageView.image = file.thumbnail
}
非常感谢任何帮助,谢谢!
【问题讨论】:
-
出于好奇,您是如何创建
AVAsset的?如果您使用的是NSItemProvider,它带有完成处理程序,该处理程序将苹果的默认缩略图作为该文件的图像。 -
哦,真的吗?听起来不错,谢谢,我得试试。我现在使用
AVURLAsset(URL: url)创建它们。 -
Link。这是该预览图像处理程序的链接。我刚刚检查了
NSItemProvider确实有initWithURL如果你只是想使用它。
标签: swift avfoundation thumbnails avassetimagegenerator