54 votes

AVAssetImageGenerator fournit des images tournées

Lorsque j'obtiens une UIImage d'une vidéo via AVAssetImageGenerator, je reçois des images pivotées (enfin, techniquement, elles ne le sont pas) alors que la vidéo a été tournée en orientation portrait. Comment puis-je déterminer l'orientation de la vidéo et faire pivoter l'image correctement ?

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];

223voto

Anomie Points 43759

La méthode la plus simple consiste à définir le paramètre appliesPreferredTrackTransform du générateur d'images à OUI, alors il devrait automatiquement effectuer la transformation pour vous.

22voto

ant_one Points 240

La solution du copier-coller pour créer une image avec l'orientation de l'enregistrement en utilisant la réponse précédente.

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

7voto

Amrit Sidhu Points 826

Voici la solution en swift version 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
}

1voto

jamal zare Points 225

Le moyen le plus simple est

imageGenerator.appliesPreferredTrackTransform = true

le moyen le plus difficile est de changer l'orientation de l'image par ce code :

let orient: UIImage.Orientation = isVertical ? .left: .up
imageView.image = UIImage(cgImage: image.cgImage!, scale: image.scale, orientation: orient)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X