【问题标题】:set image size for thumbnail image generated using AVAssetImageGenerator ios为使用 AVAssetImageGenerator ios 生成的缩略图设置图像大小
【发布时间】:2014-07-11 02:49:18
【问题描述】:

我使用AVAssetImageGenerator 类生成缩略图,但问题是我需要将该缩略图适合UITableViewCell 具有UIImageView 的大小(320,239)。 我将AVAssetImageGenerator 的最大尺寸属性指定为 (320,239) 但我没有得到我指定的所需尺寸请任何帮助提前谢谢。请查看以下代码以供快速参考。

    AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:self.consenteeVideoUrl options:nil];

AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset];

gen.maximumSize = CGSizeMake(320, 239);

gen.apertureMode = AVAssetImageGeneratorApertureModeProductionAperture;

gen.appliesPreferredTrackTransform = YES;

CMTime time = CMTimeMakeWithSeconds(0.0, 600);

NSError *error = nil;

CMTime actualTime;

CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error];

UIImage *thumbnailImage = [[UIImage alloc] initWithCGImage:image];
//thumbnailImage = [CSUtilities imageWithImage:thumbnailImage scaledToSize:CGSizeMake(320, 239)];
CGImageRelease(image);

我从“stackoverflow”获得了另一个解决方案,但对我的场景没有太大帮助。`

AVURLAsset *asset=[[AVURLAsset alloc] initWithURL:self.consenteeVideoUrl options:nil];
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
generator.appliesPreferredTrackTransform=TRUE;

CMTime thumbTime = CMTimeMakeWithSeconds(30,30);

AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error){
    if (result != AVAssetImageGeneratorSucceeded) {
        NSLog(@"couldn't generate thumbnail, error:%@", error);
    }

    UIImage *thumbnailImage = [[UIImage alloc] initWithCGImage:im];
    //save image to application directory...
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *folderPath = [documentsDirectory stringByAppendingPathComponent:self.uniqueCodeString];
    if (![[NSFileManager defaultManager] fileExistsAtPath:folderPath])
        [[NSFileManager defaultManager] createDirectoryAtPath:folderPath  withIntermediateDirectories:NO attributes:nil error:&error];

    NSString *savedImagePath = [folderPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",self.uniqueCodeString]];
    NSData *imageData = UIImagePNGRepresentation(thumbnailImage);
    BOOL success = [imageData writeToFile:savedImagePath atomically:YES];
    if (success) {
        CSLog(@"sucess");
    }
    partnerEvent.thumbnailImageStr = [self getImagePath];
    [self.ibPartnerEventTableView reloadData];
 };

 CGSize maxSize = CGSizeMake(320, 239);
 generator.maximumSize = maxSize;
 [generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:thumbTime]] completionHandler:handler];

【问题讨论】:

    标签: ios xcode assets avassetimagegenerator


    【解决方案1】:

    您的代码没有问题,但如文档中所述

    AVAssetImageGenerator 缩放图像以使其适合 定义的边界框。图像永远不会放大。的纵横比 缩放后的图像由 ApertureMode 属性定义。

    由于apertureMode 设置为AVAssetImageGeneratorApertureModeProductionAperture,生成的图像保持纵横比。如果视频和尺寸集具有相同的宽高比,它将仅适合最大尺寸,并且在指定的尺寸下不太可能发生这种情况。
    尝试将 UIImageView contentMode 更改为 UIViewContentModeScaleAspectFill 一些内容可能会被裁剪,但你会填满整个 imageView

    【讨论】:

    • ,感谢快速回放我知道这一点,最大尺寸取决于纵横比,我还有一个疑问如何使用 CMTimeMakeWithSeconds 设置帧时间。请解释一下我阅读了文档但仍然没有clear.Suppose 我需要在 3 秒后取帧如何设置,您能提前解释一下吗
    • CMTime 的含义非常深刻,如果你想了解更多关于它的信息(你应该)这里有一个教程warrenmoore.net/understanding-cmtime。阅读后您会明白,对于 3 秒后抓取一帧,您可以轻松使用 CMTime time = CMTimeMakeWithSeconds(3.0, 1);
    • Grazie Andrea,我只是在寻找如何使用 AVAssetImageGenerator 维护方面!
    猜你喜欢
    • 2017-01-21
    • 2011-09-03
    • 2018-10-28
    • 2012-03-16
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多