2012-03-19 71 views
3

我为拍摄的照片,从图片library.I有4-5 MB的大图像,但我想这些压缩我需要在本地存储这些图像存储iphone.for使用较少的内存或越来越少内存警告images.As我需要压缩这些图像。如何在iphone中压缩图像?

我不知道如何来压缩图像和videos.So我想知道热压缩图像?

UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 

    NSData* data = UIImageJPEGRepresentation(image,1.0); 
    NSLog(@"found an image"); 

    NSString *path = [destinationPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpeg", name]]; 
    [data writeToFile:path atomically:YES]; 

这是保存我的图像的代码。我不想将整个图像存储为太大。所以,我想将它压缩到更小的尺寸,因为我需要附加多个图像。

感谢您的答复。

+1

压缩图像不会帮助你与内存错误。您可以压缩图像以节省磁盘空间(flash ram),但是如果要显示图像,它们将始终在内存中解压缩,并将使用width * height * 4 ram。 – Bastian 2012-03-19 12:23:29

回答

11

您可以选择JPEG编码质量较低

NSData* data = UIImageJPEGRepresentation(image, 0.8); 

喜欢的东西0.8应该不会太明显,而应真正提高文件大小。

在此之上,考虑使JPEG表示之前调整图像大小,使用这样的方法:

+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize { 
    UIGraphicsBeginImageContext(newSize); 
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();  
    UIGraphicsEndImageContext(); 
    return newImage; 
} 

来源:The simplest way to resize an UIImage?

+0

我认为您的调整大小的第二点非常重要,根据具体情况,可以在不牺牲质量的情况下大幅度缩小尺寸。特别是如果您检测到尺寸比屏幕上可以查看的尺寸大的图像。很好的答案。 – 2014-01-30 14:02:30

5

UIImageJPEGRepresentation(UIImage的,质量);

1.0表示最高的质量和0表示最低质量。

SO更改质量参数在下面线以降低图像

NSData* data = UIImageJPEGRepresentation(image,1.0); 
1
NSData *UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality); 

OR

NSData *image_Data=UIImageJPEGRepresentation(image_Name,compressionQuality); 

返回的图像为JPEG的文件大小。如果图像没有CGImageRef或无效的位图格式,可能会返回nil。 compressionQuality是0(最)& 1(至少)。