2014-10-03 34 views
1

我尝试从视频中读取一些帧。该视频是640 x 480,但我得到的图像只有480 x 360.有没有办法获得原始大小的图像?如何设置AVAssetImageGenerator的大小?

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    NSString * mediaType = [info objectForKey:UIImagePickerControllerMediaType]; 
    if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) 
     [self readMovieFrames:[info objectForKey:UIImagePickerControllerMediaURL]]; 

    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

- (void)readMovieFrames:(NSURL *)url 
{ 
    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url]; 
    AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:playerItem.asset]; 
    imageGenerator.requestedTimeToleranceAfter = kCMTimeZero; 
    imageGenerator.requestedTimeToleranceBefore = kCMTimeZero; 
    imageGenerator.appliesPreferredTrackTransform = YES; 
    //… 
    CGImageRef imageRef = [imageGenerator copyCGImageAtTime:requestTime actualTime:&actualTime error:&error]; 
    UIImage *img = [UIImage imageWithCGImage:imageRef]; 
    UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil); 
    CGImageRelease(imageRef); 
} 

回答

3

要么使用

imageGenerator.maximumSize = CGSizeZero; 

获得一个未缩放图像或定义的640像素边框,长宽比保持

imageGenerator.maximumSize = CGSizeMake(640, 640); 

希望帮助!

0
- (void)readMovieFrames:(NSURL *)url 
{ 
    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url]; 
    AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:playerItem.asset]; 
imageGenerator.maximumSize = CGSizeMake(320, 239); 
// Add this line 
    imageGenerator.requestedTimeToleranceAfter = kCMTimeZero; 
    imageGenerator.requestedTimeToleranceBefore = kCMTimeZero; 
    imageGenerator.appliesPreferredTrackTransform = YES; 
    //… 
    CGImageRef imageRef = [imageGenerator copyCGImageAtTime:requestTime actualTime:&actualTime error:&error]; 
    UIImage *img = [UIImage imageWithCGImage:imageRef]; 
    UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil); 
    CGImageRelease(imageRef); 
} 
+0

thx,但与'imageGenerator.maximumSize = CGSizeMake(640,480);'增加我仍然只得到480 x 360图像 – Tom 2014-10-03 09:09:30