web-dev-qa-db-ja.com

AVAssetImageGeneratorは回転した画像を提供します

AVAssetImageGeneratorを介してビデオのUIImageを取得すると、ビデオが縦向きで撮影されたときに画像が回転します(技術的にはそうではありません)。ビデオが撮影された方向を確認してから、画像を適切に回転させるにはどうすればよいですか?

AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:url options:nil];
AVAssetImageGenerator *generate = [[AVAssetImageGenerator alloc] initWithAsset:asset];
NSError *err = NULL;
CMTime time = CMTimeMake(0, 60);
CGImageRef imgRef = [generate copyCGImageAtTime:time actualTime:NULL error:&err];
[generate release];
UIImage *currentImg = [[UIImage alloc] initWithCGImage:imgRef];
51
E-Madd

最も簡単な方法は、画像ジェネレーターのappliesPreferredTrackTransformプロパティをYESに設定することです。そうすると、自動的に変換が実行されます。

203
Anomie

前の回答を使用して記録方向の画像を作成するためのコピーアンドペーストソリューション。

AVURLAsset* asset = [AVURLAsset URLAssetWithURL:url options:nil];
AVAssetImageGenerator* imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset];
imageGenerator.appliesPreferredTrackTransform = YES;
CGImageRef cgImage = [imageGenerator copyCGImageAtTime:CMTimeMake(0, 1) actualTime:nil error:nil];
UIImage* image = [UIImage imageWithCGImage:cgImage];

CGImageRelease(cgImage);
19
ant_one

これがSwiftバージョン4の解決策です:

func thumbnailImageForFileUrl(_ fileUrl: URL) -> UIImage? {
    let asset = AVAsset(url: fileUrl)
    let imageGenerator = AVAssetImageGenerator(asset: asset)
    imageGenerator.appliesPreferredTrackTransform = true

    do {

        let thumbnailCGImage = try imageGenerator.copyCGImage(at: CMTimeMake(1, 60), actualTime: nil)
        return UIImage(cgImage: thumbnailCGImage)

    } catch let err {
        print(err)
    }

    return nil
}
6
Amrit Sidhu