Thumbnail Image Video

I select a video clip from the library. And I want to create his miniature. I applied this code. But the image was rotated. I want his original presentation.

- (UIImage*)testGenerateThumbNailDataWithVideo { AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:appDelegate.videoURL options:nil]; AVAssetImageGenerator *generate = [[AVAssetImageGenerator alloc] initWithAsset:asset]; NSError *err = NULL; CMTime time = CMTimeMake(1, 60); CGImageRef imgRef = [generate copyCGImageAtTime:time actualTime:NULL error:&err]; [generate release]; NSLog(@"err==%@, imageRef==%@", err, imgRef); UIImage *currentImg = [[[UIImage alloc] initWithCGImage:imgRef] autorelease]; static BOOL flag = YES; if (flag) { NSData *tmpData = UIImageJPEGRepresentation(currentImg, 0.8); NSString *path = [NSString stringWithFormat:@"%@thumbNail.png", NSTemporaryDirectory()]; BOOL ret = [tmpData writeToFile:path atomically:YES]; NSLog(@"write to path=%@, flag=%d", path, ret); flag = NO; } return currentImg; } 
+14
iphone thumbnails
Jan 18 '12 at 6:20
source share
3 answers

Try instead AVAssetImageGenerator . Apple discusses using AVAssetImageGenerator to create thumbnails here . Here is an example code that captures one thumbnail. You will need to enable the AVFoundation structure. Also add CoreMedia infrastructure

 AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:vidPath options:nil]; AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset]; gen.appliesPreferredTrackTransform = YES; CMTime time = CMTimeMakeWithSeconds(0.0, 600); NSError *error = nil; CMTime actualTime; CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error]; UIImage *thumb = [[UIImage alloc] initWithCGImage:image]; CGImageRelease(image); [gen release]; 

Another solution:

 -(void)generateImage { AVURLAsset *asset=[[AVURLAsset alloc] initWithURL:self.url options:nil]; AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; generator.appliesPreferredTrackTransform=TRUE; [asset release]; CMTime thumbTime = CMTimeMakeWithSeconds(0,30); AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error){ if (result != AVAssetImageGeneratorSucceeded) { NSLog(@"couldn't generate thumbnail, error:%@", error); } [button setImage:[UIImage imageWithCGImage:im] forState:UIControlStateNormal]; thumbImg=[[UIImage imageWithCGImage:im] retain]; [generator release]; }; CGSize maxSize = CGSizeMake(320, 180); generator.maximumSize = maxSize; [generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:thumbTime]] completionHandler:handler]; } 

or

Alasset
display image from URL retrieved from ALAsset on iPhone

+37
Jan 18 2018-12-18T00:
source share

Swift 2:

 func previewImageForLocalVideo(url:NSURL) -> UIImage? { let asset = AVAsset(URL: url) let imageGenerator = AVAssetImageGenerator(asset: asset) imageGenerator.appliesPreferredTrackTransform = true var time = asset.duration //If possible - take not the first frame (it could be completely black or white on camara videos) time.value = min(time.value, 2) do { let imageRef = try imageGenerator.copyCGImageAtTime(time, actualTime: nil) return UIImage(CGImage: imageRef) } catch let error as NSError { print("Image generation failed with error \(error)") return nil } } 
+2
Aug 08 '15 at 21:24
source share

This will solve the rotation problem.

 generate.appliesPreferredTrackTransform = YES 
0
Apr 20 '17 at 6:35
source share



All Articles