为使用AVAssetImageGenerator ios生成的缩略图设置图像大小

为使用AVAssetImageGenerator ios生成的缩略图设置图像大小,ios,xcode,assets,avassetimagegenerator,Ios,Xcode,Assets,Avassetimagegenerator,我使用了avassetimimagegenerator类来生成缩略图,但问题是我需要将该缩略图放入大小为(320239)的UITableViewCell的UIImageView中。 我指定了AVAssetImageGeneratormaximum size属性为(320239),但我没有得到我指定的所需大小,请提前提供帮助,谢谢。请查看下面的代码,以便快速参考 AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:self.consent

我使用了
avassetimimagegenerator
类来生成缩略图,但问题是我需要将该缩略图放入大小为(320239)的
UITableViewCell
UIImageView
中。 我指定了
AVAssetImageGenerator
maximum size属性为(320239),但我没有得到我指定的所需大小,请提前提供帮助,谢谢。请查看下面的代码,以便快速参考

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

代码中没有错误,但如文档中所述

AVAssetImageGenerator缩放图像,使其适合于 定义的边界框。图像永远不会放大。长宽比 缩放图像由apertureMode属性定义。

由于
apertureMode
设置为
avassetimimagegeneratoraperturemodeproductionaperture
生成的图像保持纵横比。只有当视频和大小集具有相同的纵横比时,它才适合最大大小,而在指定的大小下,这种情况不太可能发生。

尝试将
UIImageView
contentMode
更改为
UIViewContentModeScaleSpectFill
某些内容可能会被裁剪,但您将填充整个imageView

,多亏了快速回放,我知道这一点,最大大小取决于纵横比,我还有一个疑问,那就是如何使用CMTimeMakeWithSeconds设置帧时间。请对此进行解释。我阅读了文档,但仍然不清楚。假设我需要在3秒钟后拍摄帧,如何设置它,您可以提前解释谢谢CMTime的含义非常深刻,如果您想了解更多信息(您应该这样做)这里有一个教程。一旦你阅读了它,你就会明白,对于在3秒后抓取一帧,你可以使用CMTime time=CMTimeMakeWithSeconds(3.0,1)轻松获得;Grazie Andrea,我只是想看看如何使用AVAssetImageGenerator维护aspect!