reduce camera/photo library image file size for less than 100 KB in iphone
Asked Answered
O

3

7

I want to reduce image file size that take from UIImagePickerController . I use this method

NSData *imageData = UIImageJPEGRepresentation(image, 0.1);

but it reduce 2.2 MB image file size to 300 KB I want my image file size become less than 100 KB.

Odd answered 29/12, 2012 at 19:14 Comment(2)
Check out this question: #2313928 [1]: #2313928Unroot
After all I found this solution is the best one #612631Odd
P
2

Easiest way to reduce image size in kilos is to reduce the size in pixels! Scale it smaller:

CGFloat scaleSize = 0.2f;
UIImage *smallImage = [UIImage imageWithCGImage:image.CGImage
                      scale:scaleSize
                      orientation:image.imageOrientation];
Plenish answered 30/12, 2012 at 0:25 Comment(4)
Exactlly! A large image can't be downsized to 100K in jpeg format, even at highest compression level, so idea is to resize it, then compress it.Lupitalupo
@Lupitalupo I use this method and instead of 0.2 for scalesize I set it 5 to reduce image size 5 times and then use the previous method but the file size didn't change.Odd
Scale 1 (one) means same size as original image. You should use a value smaller than one, not bigger.Plenish
this method returns exactly the same image but with a different density maintaining the same file sizeBoutin
A
8

Apple's docs state:

The quality of the resulting JPEG image, expressed as a value from 0.0 to 1.0. The value 0.0 represents the maximum compression (or lowest quality) while the value 1.0 represents the least compression (or best quality).

And since the compression quality is a CGFloat, it supports decimal places beyond the tenths place. That being said, try:

NSData *imageData = UIImageJPEGRepresentation(image, 0.032);
Adelaadelaida answered 29/12, 2012 at 19:21 Comment(1)
it's not reduce than 300 kbOdd
P
2

Easiest way to reduce image size in kilos is to reduce the size in pixels! Scale it smaller:

CGFloat scaleSize = 0.2f;
UIImage *smallImage = [UIImage imageWithCGImage:image.CGImage
                      scale:scaleSize
                      orientation:image.imageOrientation];
Plenish answered 30/12, 2012 at 0:25 Comment(4)
Exactlly! A large image can't be downsized to 100K in jpeg format, even at highest compression level, so idea is to resize it, then compress it.Lupitalupo
@Lupitalupo I use this method and instead of 0.2 for scalesize I set it 5 to reduce image size 5 times and then use the previous method but the file size didn't change.Odd
Scale 1 (one) means same size as original image. You should use a value smaller than one, not bigger.Plenish
this method returns exactly the same image but with a different density maintaining the same file sizeBoutin
E
1

First resize the image with below method:

- (UIImage *)resizeImage:(UIImage*)image newSize:(CGSize)newSize {
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

call this by:

UIImage *newImage=yourImage;
CGSize size=CGSizeMake(newImage.size.width/8,newImage.size.height/8);
newImage=[self resizeImage:newImage newSize:size];

And finally compressed your image as required:

NSData *imageData = UIImageJPEGRepresentation(newImage, 0.5);
NSLog(@"Size of image = %lu KB",(imageData.length/1024));
Emileemilee answered 15/10, 2015 at 6:20 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.