Edited at

AVAssetImageGeneratorから取得した画像が画面に表示されている向きと一致しない場合の対応

More than 3 years have passed since last update.


発生した問題

AVAssetImageGenerator を使って動画から静止画を抽出しようとした際に、動画を撮影した際の端末の向きによって画面に表示されている方向とは別方向で静止画が取得されてしまう現象が起きたので、それの対応方法


参考(端末の向き)

Supported Interface Orientations.png


再現コード


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)
}
}