Created
December 25, 2019 06:28
-
-
Save darcyliu/bc5d8c2e600c38faa54a70425bfafeb6 to your computer and use it in GitHub Desktop.
Image Resizing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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