加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – generateCGImagesAsynchronouslyForTimes有时不会生成

发布时间:2020-12-14 05:21:47 所属栏目:百科 来源:网络整理
导读:我正在使用一个使用AVAsset ImageGenerator.generateCGImagesAsynchronouslyForTimes的OS X应用程序,它通常工作正常.然而,一段时间后,我回来的缩略图只包含前几行像素,其余的是绿色,有时图像将是不同的绿色.很难跟踪,因为它不会一直发生,但是当大约一半的缩
我正在使用一个使用AVAsset ImageGenerator.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
}

非常感谢任何帮助,谢谢!

而不是使用generateCGImagesAsynchronouslyForTimes方法,您可以使用copyCGImageAtTime方法从资产中获取图像,并保存该图像.这是代码.
let assetGenerator = AVAssetImageGenerator(asset: AVURLAsset(URL: url))
assetGenerator.appliesPreferredTrackTransform = true
assetGenerator.maximumSize = maxThumbnailSize
let time = CMTime(seconds: 0,preferredTimescale: 30)
do {
    let cgImage = try assetGenerator.copyCGImageAtTime(time,actualTime: nil)
    let s = CGSize(width: CGImageGetWidth(cgImage),height: CGImageGetHeight(cgImage))
    self.thumbnail = NSImage(CGImage: cgImage,size: s)    
} catch let error {
    print(error)
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读