Cómo escribir datos de orientación en el UIImage iOS SDK

Tengo un problema, tengo un UIImage de imagePicker (camera not library) pero cuando lo escribo en un file con [UIImageJPEGRepresentation writeToFile: atómicamente:] estoy perdiendo datos de orientación (todas las imágenes están en paisaje), utilicé un código con image Transformación, pero lleva mucho time de 1,5 a 2 segundos por image, mi pregunta es ¿cómo no perder la orientación? Tal vez pueda escribirlo en datos EXIF? Gracias por la ayuda.

EDIT: Thx a Jonathan Cichon, ahora obtuve una orientación de image con UIImagePickerControllerMediaMetadata i got (Orientation = 6), pero ¿cómo almacenarlo en un file jpg? (nuevamente guardé el file con [UIImageJPEGRepresentation writeToFile: atómicamente:] proc)

Mire esta publicación para get información sobre cómo almacenar datos EXIF. Si no recuerdo mal, puede usar UIImagePickerControllerMediaMetadata tal como está. Al less, debe encontrar toda la información de orientación necesaria en este dictionary para crear sus datos EXIF.

Mire la mejor respuesta clasificada de la publicación vinculada y reemplace la primera línea con

NSData * jpeg = UIImageJPEGRepresentation(yourImage, 1); 

Ok Lo que encontré en la búsqueda simple de Google es como se muestra a continuación desde este enlace.

 UIImage *scaleAndRotateImage(UIImage *image) {   int kMaxResolution = 320; // Or whatever   CGImageRef imgRef = image.CGImage;   CGFloat width = CGImageGetWidth(imgRef);   CGFloat height = CGImageGetHeight(imgRef);   CGAffineTransform transform = CGAffineTransformIdentity;   CGRect bounds = CGRectMake(0, 0, width, height);   if (width > kMaxResolution || height > kMaxResolution) {      CGFloat ratio = width/height;      if (ratio > 1) {         bounds.size.width = kMaxResolution;         bounds.size.height = bounds.size.width / ratio;      }      else {         bounds.size.height = kMaxResolution;         bounds.size.width = bounds.size.height * ratio;      }   }   CGFloat scaleRatio = bounds.size.width / width;   CGSize imageSize = CGSizeMake(CGImageGetWidth(imgRef), CGImageGetHeight(imgRef));   CGFloat boundHeight;   UIImageOrientation orient = image.imageOrientation;   switch(orient) {      case UIImageOrientationUp: //EXIF = 1         transform = CGAffineTransformIdentity;         break;      case UIImageOrientationUpMirronetworking: //EXIF = 2         transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0);         transform = CGAffineTransformScale(transform, -1.0, 1.0);         break;      case UIImageOrientationDown: //EXIF = 3         transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height);         transform = CGAffineTransformRotate(transform, M_PI);         break;      case UIImageOrientationDownMirronetworking: //EXIF = 4         transform = CGAffineTransformMakeTranslation(0.0, imageSize.height);         transform = CGAffineTransformScale(transform, 1.0, -1.0);         break;      case UIImageOrientationLeftMirronetworking: //EXIF = 5         boundHeight = bounds.size.height;         bounds.size.height = bounds.size.width;         bounds.size.width = boundHeight;         transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width);         transform = CGAffineTransformScale(transform, -1.0, 1.0);         transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);         break;      case UIImageOrientationLeft: //EXIF = 6         boundHeight = bounds.size.height;         bounds.size.height = bounds.size.width;         bounds.size.width = boundHeight;         transform = CGAffineTransformMakeTranslation(0.0, imageSize.width);         transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);         break;      case UIImageOrientationRightMirronetworking: //EXIF = 7         boundHeight = bounds.size.height;         bounds.size.height = bounds.size.width;         bounds.size.width = boundHeight;         transform = CGAffineTransformMakeScale(-1.0, 1.0);         transform = CGAffineTransformRotate(transform, M_PI / 2.0);         break;      case UIImageOrientationRight: //EXIF = 8         boundHeight = bounds.size.height;         bounds.size.height = bounds.size.width;         bounds.size.width = boundHeight;         transform = CGAffineTransformMakeTranslation(imageSize.height, 0.0);         transform = CGAffineTransformRotate(transform, M_PI / 2.0);         break;      default:         [NSException raise:NSInternalInconsistencyException format:@"Invalid image orientation"];   }   UIGraphicsBeginImageContext(bounds.size);   CGContextRef context = UIGraphicsGetCurrentContext();   if (orient == UIImageOrientationRight || orient == UIImageOrientationLeft) {      CGContextScaleCTM(context, -scaleRatio, scaleRatio);      CGContextTranslateCTM(context, -height, 0);   }   else {      CGContextScaleCTM(context, scaleRatio, -scaleRatio);      CGContextTranslateCTM(context, 0, -height);   }   CGContextConcatCTM(context, transform);   CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef);   UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();   UIGraphicsEndImageContext();   return imageCopy; }