iOS: Image get rotated 90 degree after saved as PNG representation data

image-rotation, ios5.1, iphone, landscape-portrait, uiimage

Solution

Starting with iOS 4.0 when the camera takes a photo it does not rotate it before saving, it

simply sets a rotation flag in the EXIF data of the JPEG.If you save a UIImage as a JPEG, it

will set the rotation flag.PNGs do not support a rotation flag, so if you save a UIImage as a

PNG, it will be rotated incorrectly and not have a flag set to fix it. So if you want PNG

images you must rotate them yourself, for that check this link.

Problem

I have researched enough to get this working but not able to fix it. After taking picture from camera as long as I have image stored as UIImage, it's fine but as soon as I stored this image as PNG representation, its get rotated 90 degree. Following is my code and all things I tried: ``` - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { NSString *mediaType = [info valueForKey:UIImagePickerControllerMediaType]; if([mediaType isEqualToString:(NSString*)kUTTypeImage]) { AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; delegate.originalPhoto = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; NSLog(@"Saving photo"); [self saveImage]; NSLog(@"Fixing orientation"); delegate.fixOrientationPhoto = [self fixOrientation:[UIImage imageWithContentsOfFile:[delegate filePath:imageName]]]; NSLog(@"Scaling photo"); delegate.scaledAndRotatedPhoto = [self scaleAndRotateImage:[UIImage imageWithContentsOfFile:[delegate filePath:imageName]]]; } [picker dismissModalViewControllerAnimated:YES]; [picker release]; } - (void)saveImage { AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; NSData *imageData = UIImagePNGRepresentation(delegate.originalPhoto); [imageData writeToFile:[delegate filePath:imageName] atomically:YES]; } ``` Here fixOrientation and scaleAndRotateImage functions taken from here and here respectively. They works fine and rotate image when I apply them on UIImage but doesn't work if I save image as PNG representation and apply them. Please refere the following picture after executing above functions:

Original source

Related problems