如何在 Swift 中使用 copyCGImageAtTime 从视频中创建缩略图?
Posted
技术标签:
【中文标题】如何在 Swift 中使用 copyCGImageAtTime 从视频中创建缩略图?【英文标题】:How do I create a thumbnail from a video using copyCGImageAtTime in Swift? 【发布时间】:2015-07-02 16:33:35 【问题描述】:我正在尝试使用 copyCGImageAtTime
从视频创建缩略图,但我不断收到以下错误:
致命错误:在展开 Optional 时意外发现 nil 价值。
我在调用copyCGImageAtTime
后使用了线路中断,发现img
是nil
。我做错了什么?
这是我的代码:
func generateThumbnail() -> UIImage
var fileArray = NSBundle.mainBundle().pathsForResourcesOfType (".mp4", inDirectory: "")
var moviePath : String = fileArray[1] as! String
let url = NSURL(string: moviePath)
var asset : AVAsset = AVAsset.assetWithURL(url) as! AVAsset
var assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
assetImgGenerate.appliesPreferredTrackTransform = true
var durationSeconds: Float64 = CMTimeGetSeconds(asset.duration)
var time: CMTime = CMTimeMakeWithSeconds(durationSeconds/2.0, 600)
var actualTime: UnsafeMutablePointer<CMTime> = nil
var error: NSErrorPointer = nil
var img: CGImage! = assetImgGenerate.copyCGImageAtTime(time, actualTime: actualTime, error: error)
var frameImg : UIImage = UIImage(CGImage: img)!
return frameImg
【问题讨论】:
【参考方案1】:这对我有用。但是,我从这种方法中得到了信息。也许你可以根据你的代码调整它。
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject])
let tempImage = info[UIImagePickerControllerMediaURL] as! NSURL!
let pathString = tempImage.relativePath
var url:NSURL = NSURL(fileURLWithPath: pathString!)!
var asset:AVAsset = AVAsset.assetWithURL(url) as! AVAsset
var assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
var time: CMTime = asset.duration
time.value = 0
var imageRef: CGImage! = assetImgGenerate.copyCGImageAtTime(time, actualTime: nil, error: nil)
var frameImg : UIImage = UIImage(CGImage: imageRef)!
return framImg
【讨论】:
以上是关于如何在 Swift 中使用 copyCGImageAtTime 从视频中创建缩略图?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 kotlin native 中使用 swift 库?
如何在 Swift 中使用 Apple 地图 - 你必须使用 C 还是 Swift 可以?