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

标签 ios xcode assets avassetimagegenerator

我使用 AVAssetImageGenerator 类来生成缩略图,但问题是我需要将该缩略图放入具有 UIImageView 大小的 UITableViewCell 中( 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];

最佳答案

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

AVAssetImageGenerator scales images such that they fit within the defined bounding box. Images are never scaled up. The aspect ratio of the scaled image is defined by the apertureMode property.

由于apertureMode设置为AVAssetImageGeneratorApertureModeProductionAperture,生成的图像保持宽高比。仅当视频和尺寸集具有相同的宽高比时,它才会适合最大尺寸,而使用指定的尺寸则不太可能发生这种情况。
尝试将 UIImageView contentMode 更改为 UIViewContentModeScaleAspectFill 某些内容可能会被裁剪,但您将填充整个 imageView

关于ios - 设置使用 AVAssetImageGenerator ios 生成的缩略图的图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23800500/

相关文章:

ios - 退出申请后隐藏用户界面

ios - 在 Xcode 上运行我的第一个 IOS 应用程序时出错

具有相同第三方库的 iOS 静态库导致重复符号错误

node.js - Ember.js、Express.js 和 Node.js 的 Assets 管道?

android - 从 Assets 文件夹中打开 HTML 文件

ios - 在 XCtest 类中使用 override init()?

iphone - 动画 UIView 比例为零

ios - 使用谓词后 MPMusicPlayerController 不会自动跳到下一个项目

ios - Xcode 设置版本和内部版本号

ios - Swift:将照片添加到自定义相册