调整图像大小并保存在文档崩溃中

时间:2012-11-29 09:11:34

标签: ios ipad uiimage

在我的应用中,我需要通过代码创建将要使用的图像。我下载了全屏版图像,然后创建了我需要的所有剪辑。此方法减少了用户从服务器下载的MB。 下载的图像大约为300. iPad非视网膜尺寸为1024x768,iPad视网膜尺寸为2048x1536。

这是我用来调整图像大小以创建我需要的剪辑的算法。为每个图像创建另一个缩小版本,然后将保存在Document文件夹中。

我使用ARC和GCD。

    CGFloat screenScale = [UIScreen mainScreen].scale;
    
    NSString * imagePath = [[NSBundle mainBundle]pathForResource:imageName ofType:nil];
    UIImage * image = [UIImage imageWithContentsOfFile:imagePath];
    CGSize newImageSize = [image resizeImageSettingWidth:(380.0f * screenScale)];
    
    UIGraphicsBeginImageContext(newImageSize);
    [image drawInRect:CGRectMake(0,0,newImageSize.width,newImageSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    NSData *jpegData = UIImageJPEGRepresentation(newImage, 0.9f);
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0];
    
    NSString * newImageName;
    if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
        ([UIScreen mainScreen].scale == 2.0)) {
        
        newImageName = [NSString stringWithFormat:@"%@-article@2x.jpg", [imageName stringByDeletingPathExtension]];
        
    }
    else {
        
        newImageName = [NSString stringWithFormat:@"%@-article.jpg", [imageName stringByDeletingPathExtension]];
    }
    
    NSString *filePath = [documentsPath stringByAppendingPathComponent:newImageName]; 
    [jpegData writeToFile:filePath atomically:YES];

在未知数量的应用程序调整大小后,应用程序崩溃可能是内存警告。崩溃只发生在iPad第4代,在iPad2上完美运行。 也许问题是autorelease对象释放得晚,这会产生累积的内存?

0 个答案:

没有答案