AVAssetImageGenerator提供旋转的图像

E-M*_*add 50 iphone objective-c avfoundation ios

当通过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];
Run Code Online (Sandbox Code Playgroud)

Ano*_*mie 203

最简单的方法是appliesPreferredTrackTransform将图像生成器上的属性设置为YES,然后它会自动为您进行转换.


小智 19

复制和粘贴解决方案,使用上一个答案创建具有记录方向的图像.

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);
Run Code Online (Sandbox Code Playgroud)


Amr*_*dhu 6

这是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
}
Run Code Online (Sandbox Code Playgroud)