如何将定向数据写入UIImage iOS SDK

我有一个问题,我从imagePicker(相机不是图书馆)UIImage,但是当我写它与文件[UIImageJPEGRepresentation writeToFile:primefaces:]我失去了方向数据(所有图像在横向),我用一些代码与图像转化,但是每个图像需要1.5-2秒的时间太长,我的问题是如何不放松方向? 也许我可以把它写入EXIF数据? Thx寻求帮助。

编辑: Thx乔纳森Cichon,现在我得到了与UIImagePickerControllerMediaMetadata我(方向= 6)的图像方向,但如何将其存储到JPG文件? (再次我保存文件与[UIImageJPEGRepresentation writeToFile:atomically:] proc)

查看这篇文章 ,了解如何存储EXIF数据。 如果我没有记错,你可以使用UIImagePickerControllerMediaMetadata。 至less你应该在这个词典中find所有必要的方向信息来创build你的EXIF数据。

查看链接post的最佳答案,并用第一行replace

NSData * jpeg = UIImageJPEGRepresentation(yourImage, 1); 

好的我在简单的谷歌search中find如下从这个链接

 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 UIImageOrientationUpMirrored: //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 UIImageOrientationDownMirrored: //EXIF = 4         transform = CGAffineTransformMakeTranslation(0.0, imageSize.height);         transform = CGAffineTransformScale(transform, 1.0, -1.0);         break;      case UIImageOrientationLeftMirrored: //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 UIImageOrientationRightMirrored: //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; }