Skip to content

Instantly share code, notes, and snippets.

@darcyliu
Created December 25, 2019 06:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save darcyliu/bc5d8c2e600c38faa54a70425bfafeb6 to your computer and use it in GitHub Desktop.
Save darcyliu/bc5d8c2e600c38faa54a70425bfafeb6 to your computer and use it in GitHub Desktop.
Image Resizing
@implementation UIImage (Helpers)
- (UIImage *)scaleImageToSize:(CGSize)newSize
{
UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:newSize];
UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext*_Nonnull myContext) {
[self drawInRect:(CGRect) {.origin = CGPointZero, .size = newSize}];
}];
return image;
}
+ (UIImage *)scaleImageData:(NSData *)imageData toMaxPixelSize:(CGFloat)maxPixelSize
{
CGImageSourceRef imageSourceRef = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL);
CGImageRef imageRef = CGImageSourceCreateImageAtIndex(imageSourceRef, 0, NULL);
UIImage *scaledImage = [UIImage scaleImage:imageRef toMaxPixelSize:maxPixelSize];
CGImageRelease(imageRef);
if (imageSourceRef != NULL) {
CFRelease(imageSourceRef);
}
return scaledImage;
}
+ (UIImage *)scaleImage:(CGImageRef)cgImage toMaxPixelSize:(CGFloat)maxPixelSize
{
size_t imageWidth = CGImageGetWidth(cgImage);
size_t imageHeight = CGImageGetHeight(cgImage);
CGSize scaledSize = CGSizeMake(imageWidth, imageHeight);
if (imageWidth > maxPixelSize || imageHeight > maxPixelSize) {
size_t targetWidth, targetHeight;
if (imageWidth > imageHeight) {
targetWidth = maxPixelSize;
targetHeight = (maxPixelSize * imageHeight + imageWidth / 2) / imageWidth;
} else {
targetHeight = maxPixelSize;
targetWidth = (maxPixelSize * imageWidth + imageHeight / 2) / imageHeight;
}
scaledSize = CGSizeMake(targetWidth, targetHeight);
}
size_t width = scaledSize.width, height = scaledSize.height;
UIImage *newImage;
if (imageWidth != width || imageHeight != height) {
CGColorSpaceRef colorspace = CGImageGetColorSpace(cgImage);
CGContextRef context =
CGBitmapContextCreate(NULL, width, height, CGImageGetBitsPerComponent(cgImage),
CGImageGetBytesPerRow(cgImage), colorspace, CGImageGetAlphaInfo(cgImage));
if (context == NULL) {
return nil;
}
CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgImage);
CGImageRef imageRef = CGBitmapContextCreateImage(context);
newImage = [UIImage imageWithCGImage:imageRef scale:1 orientation:UIImageOrientationRight];
CFRelease(imageRef);
CGContextRelease(context);
} else {
newImage = [UIImage imageWithCGImage:cgImage scale:1 orientation:UIImageOrientationRight];
}
return newImage;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment