How to compress/resize image on iOS before uploading to a server? How to compress/resize image on iOS before uploading to a server? ios ios

How to compress/resize image on iOS before uploading to a server?


This snippet will resize the image:

UIGraphicsBeginImageContext(newSize);[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();

The variable newSize is a CGSize and can be defined like so:

CGSize newSize = CGSizeMake(100.0f, 100.0f);


A self-contained solution:

- (UIImage *)compressForUpload:(UIImage *)original scale:(CGFloat)scale{    // Calculate new size given scale factor.    CGSize originalSize = original.size;    CGSize newSize = CGSizeMake(originalSize.width * scale, originalSize.height * scale);    // Scale the original image to match the new size.    UIGraphicsBeginImageContext(newSize);    [original drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];    UIImage *compressedImage = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return compressedImage;}

Thanks to @Tuan Nguyen.


To complement @Tuan Nguyen, this is maybe the fastest and most elegant way to do that.

To link to John Muchow's post at iphonedevelopertips.com , adding a category to a UIImage is a very very handy way to scale in a very fast fashion.Just calling

    UIImage *_image = [[[UIImage alloc] initWithData:SOME_NSDATA] scaleToSize:CGSizeMake(640.0,480.0)];

returns you a 640x480 representation image of your NSDATA ( that could be an online image ) without any more line of code.