Created
July 26, 2013 18:05
-
-
Save BennettSmith/6090916 to your computer and use it in GitHub Desktop.
UIImage class category for ParadigmPics sample application.
This file contains 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
#import <UIKit/UIKit.h> | |
@interface UIImage (ParadigmPics) | |
+ (void)saveImage:(UIImage*)image withFilename:(NSString *)filename; | |
+ (UIImage*)loadImageFromFile:(NSString *)filename; | |
+ (UIImage *)fixOrientationForImage:(UIImage *)aImage; | |
@end |
This file contains 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
#import "UIImage+ParadigmPics.h" | |
@implementation UIImage (ParadigmPics) | |
// Courtesy of Pavel Gnatyuk, posted on-line. | |
// http://www.wmdeveloper.com/2010/09/save-and-load-uiimage-in-documents.html | |
+ (void)saveImage:(UIImage*)image withFilename:(NSString *)filename | |
{ | |
if (image != nil) | |
{ | |
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, | |
NSUserDomainMask, YES); | |
NSString *documentsDirectory = [paths objectAtIndex:0]; | |
NSString* path = [documentsDirectory stringByAppendingPathComponent:filename]; | |
NSData* data = UIImagePNGRepresentation(image); | |
[data writeToFile:path atomically:YES]; | |
} | |
} | |
// Courtesy of Pavel Gnatyuk, posted on-line. | |
// http://www.wmdeveloper.com/2010/09/save-and-load-uiimage-in-documents.html | |
+ (UIImage*)loadImageFromFile:(NSString *)filename | |
{ | |
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, | |
NSUserDomainMask, YES); | |
NSString *documentsDirectory = [paths objectAtIndex:0]; | |
NSString* path = [documentsDirectory stringByAppendingPathComponent:filename]; | |
UIImage* image = [UIImage imageWithContentsOfFile:path]; | |
return image; | |
} | |
// Courtesy of Javen Yang, posted on Stack Overflow. | |
// http://stackoverflow.com/questions/13393909/uiimage-uplaod-to-rest-server-the-orientation-will-chage | |
+ (UIImage *)fixOrientationForImage:(UIImage *)aImage | |
{ | |
// No-op if the orientation is already correct | |
if (aImage.imageOrientation == UIImageOrientationUp) | |
return aImage; | |
// We need to calculate the proper transformation to make the image upright. | |
// We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored. | |
CGAffineTransform transform = CGAffineTransformIdentity; | |
switch (aImage.imageOrientation) { | |
case UIImageOrientationDown: | |
case UIImageOrientationDownMirrored: | |
transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height); | |
transform = CGAffineTransformRotate(transform, M_PI); | |
break; | |
case UIImageOrientationLeft: | |
case UIImageOrientationLeftMirrored: | |
transform = CGAffineTransformTranslate(transform, aImage.size.width, 0); | |
transform = CGAffineTransformRotate(transform, M_PI_2); | |
break; | |
case UIImageOrientationRight: | |
case UIImageOrientationRightMirrored: | |
transform = CGAffineTransformTranslate(transform, 0, aImage.size.height); | |
transform = CGAffineTransformRotate(transform, -M_PI_2); | |
break; | |
default: | |
break; | |
} | |
switch (aImage.imageOrientation) { | |
case UIImageOrientationUpMirrored: | |
case UIImageOrientationDownMirrored: | |
transform = CGAffineTransformTranslate(transform, aImage.size.width, 0); | |
transform = CGAffineTransformScale(transform, -1, 1); | |
break; | |
case UIImageOrientationLeftMirrored: | |
case UIImageOrientationRightMirrored: | |
transform = CGAffineTransformTranslate(transform, aImage.size.height, 0); | |
transform = CGAffineTransformScale(transform, -1, 1); | |
break; | |
default: | |
break; | |
} | |
// Now we draw the underlying CGImage into a new context, applying the transform | |
// calculated above. | |
CGContextRef ctx = CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height, | |
CGImageGetBitsPerComponent(aImage.CGImage), 0, | |
CGImageGetColorSpace(aImage.CGImage), | |
CGImageGetBitmapInfo(aImage.CGImage)); | |
CGContextConcatCTM(ctx, transform); | |
switch (aImage.imageOrientation) { | |
case UIImageOrientationLeft: | |
case UIImageOrientationLeftMirrored: | |
case UIImageOrientationRight: | |
case UIImageOrientationRightMirrored: | |
// Grr... | |
CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage); | |
break; | |
default: | |
CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.width,aImage.size.height), aImage.CGImage); | |
break; | |
} | |
// And now we just create a new UIImage from the drawing context | |
CGImageRef cgimg = CGBitmapContextCreateImage(ctx); | |
UIImage *img = [UIImage imageWithCGImage:cgimg]; | |
CGContextRelease(ctx); | |
CGImageRelease(cgimg); | |
return img; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment