【问题标题】:How to set size for AVAssetImageGenerator?如何设置 AVAssetImageGenerator 的大小?
【发布时间】:2014-11-28 08:05:26
【问题描述】:

我尝试从视频中读取一些帧。视频是 640 x 480 但我得到的图像只有 480 x 360。有没有办法得到原始尺寸的图像?

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

【问题讨论】:

    标签: objective-c avfoundation avassetimagegenerator


    【解决方案1】:

    任意使用

    imageGenerator.maximumSize = CGSizeZero; 
    

    要获得未缩放的图像或定义 640 像素的边界框,纵横比保持不变

    imageGenerator.maximumSize = CGSizeMake(640, 640);
    

    希望有帮助!

    【讨论】:

      【解决方案2】:
      - (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);  
      }
      

      【讨论】:

      • 谢谢,但是添加了imageGenerator.maximumSize = CGSizeMake(640, 480);我仍然只能得到 480 x 360 图像
      猜你喜欢
      • 2014-07-11
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多