Cuando la obtención de un UIImage de un vídeo a través de AVAssetImageGenerator, estoy recibiendo imágenes rotadas (bueno, técnicamente no están) cuando el vídeo está rodado en la orientación vertical. ¿Cómo puedo saber cuál es la orientación que el video fue filmado y, a continuación, girar la imagen correctamente?

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];
InformationsquelleAutor E-Madd | 2011-03-18

3 Comentarios

  1. 203

    La forma más fácil es simplemente el conjunto de la appliesPreferredTrackTransform de la propiedad en el generador de imágenes para SÍ, entonces automáticamente debe hacer la transformación para usted.

    • Muchas gracias! Yo leímos el docs, pero el nombre de esta propiedad, simplemente no se sugieren para mí no tenía nada que ver con el problema.
    • Por alguna razón, el ajuste a YES (también trató de NO también, no hay diferencia) no hacer nada y que todavía gira. (el activo es encapsulado por una GPUImageMovie, si eso ayuda).
  2. 19

    La copia y pegar la solución para crear una imagen con la grabación de orientación mediante la respuesta anterior.

    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);
  3. 6

    Aquí está la solución en swift versión 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
    }

Dejar respuesta

Please enter your comment!
Please enter your name here