LoginSignup
10
7

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-03-09

発生した問題

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7