2012-03-19 72 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(至少)。