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.