発生した問題
AVAssetImageGenerator を使って動画から静止画を抽出しようとした際に、動画を撮影した際の端末の向きによって画面に表示されている方向とは別方向で静止画が取得されてしまう現象が起きたので、それの対応方法
参考(端末の向き)
再現コード
Swift
var asset: AVURLAsset
〜〜〜
let generator = AVAssetImageGenerator(asset: asset)
let captureImage: CGImageRef = generator.copyCGImageAtTime(asset.duration, actualTime: nil, error: nil)
var image = UIImage(CGImage: captureImage)
対応コード
Swift
var track = asset.tracksWithMediaType(AVMediaTypeVideo)
if let media = track[0] as? AVAssetTrack {
var naturalSize: CGSize = media.naturalSize
var transform: CGAffineTransform = media.preferredTransform
if transform.tx == naturalSize.width && transform.ty == naturalSize.height {
UIImage(CGImage: captureImage scale: 1.0 orientation: UIImageOrientation.Down)
} else if transform.tx == 0 && transform.ty == 0 {
UIImage(CGImage: captureImage scale: 1.0 orientation: UIImageOrientation.Up)
} else if transform.tx == 0 && transform.ty == naturalSize.width {
UIImage(CGImage: captureImage scale: 1.0 orientation: UIImageOrientation.Left)
} else {
UIImage(CGImage: captureImage scale: 1.0 orientation: UIImageOrientation.Right)
}
}