Saturday, 15 June 2013

Resize UIImage to generate thumbnail in apple iOS app - Xcode.


+ (UIImage *)generatePhotoThumbnail:(UIImage *)image withSide:(CGFloat)ratio
{
// Create a thumbnail version of the image for the event object.
CGSize size = image.size;
CGSize croppedSize;

CGFloat offsetX = 0.0;
CGFloat offsetY = 0.0;
    
// check the size of the image, we want to make it
// a square with sides the size of the smallest dimension.
    // So clip the extra portion from x or y coordinate
if (size.width > size.height) {
offsetX = (size.height - size.width) / 2;
croppedSize = CGSizeMake(size.height, size.height);
} else {
offsetY = (size.width - size.height) / 2;
croppedSize = CGSizeMake(size.width, size.width);
}
    
// Crop the image before resize
CGRect clippedRect = CGRectMake(offsetX * -1, offsetY * -1, croppedSize.width, croppedSize.height);
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], clippedRect);
// Done cropping
    
// Resize the image
CGRect rect = CGRectMake(0.0, 0.0, ratio, ratio);
    
UIGraphicsBeginImageContext(rect.size);
[[UIImage imageWithCGImage:imageRef] drawInRect:rect];
UIImage *thumbnail = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// Done Resizing
    
return thumbnail;
}

4 comments:

  1. You have a memory leak here. You forgot to call CGImageRelease(imageRef)

    ReplyDelete
  2. The best solution for me!!Thank you!

    ReplyDelete
  3. It works, but the thumbnail losses a too much quality... the image stays blurry.

    ReplyDelete