swift – generateCGImagesAsynchronouslyForTimes有时不会生成完整的缩略图

前端之家收集整理的这篇文章主要介绍了swift – generateCGImagesAsynchronouslyForTimes有时不会生成完整的缩略图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用一个使用AVAsset ImageGenerator.generateCGImagesAsynchronouslyForTimes的OS X应用程序,它通常工作正常.然而,一段时间后,我回来的缩略图只包含前几行像素,其余的是绿色,有时图像将是不同的绿色.很难跟踪,因为它不会一直发生,但是当大约一半的缩略图受到影响时.这是我期望看到的形象:

但经常发生这种情况:

以下是我用来生成缩略图代码

  1. let assetGenerator = AVAssetImageGenerator(asset: AVURLAsset(URL: url))
  2. assetGenerator.appliesPreferredTrackTransform = true
  3. let time = CMTime(seconds: 0,preferredTimescale: 30)
  4.  
  5. let handler: AVAssetImageGeneratorCompletionHandler = { _,image,_,res,error in
  6. defer { dispatch_group_leave(self.waitForThumbnail!) }
  7.  
  8. guard let image = image where res == .Succeeded else {
  9. if let error = error { print(error) }
  10. return
  11. }
  12.  
  13. let s = CGSize(width: CGImageGetWidth(image),height: CGImageGetHeight(image))
  14. self.thumbnail = NSImage(CGImage: image,size: s)
  15.  
  16. }
  17.  
  18. waitForThumbnail = dispatch_group_create()
  19. dispatch_group_enter(waitForThumbnail!)
  20.  
  21. assetGenerator.maximumSize = maxThumbnailSize
  22. assetGenerator.generateCGImagesAsynchronouslyForTimes([NSValue(CMTime: time)],completionHandler: handler)

这就是我如何检索缩略图

  1. dispatch_group_wait(file.waitForThumbnail!,DISPATCH_TIME_FOREVER)
  2. dispatch_async(dispatch_get_main_queue()) {
  3. self.imageView.image = file.thumbnail
  4. }

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

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

猜你在找的Swift相关文章