iOS上传相册图片到服务器端显示位置翻转问题

转载 2015年11月18日 22:08:44

iOS用相机拍摄出来的照片含有EXIF信息,UIImage的imageOrientation属性指的就是EXIF中的orientation信息。因为不是所有的工具都支持方向属性,这其中甚至包含了具有最多用户群体的Windows,所以要在保存之前将照片旋转至正常观看的方向即可,然后直接将最终具有正确方向的照片保存下来。
首先,为 UIImage 创建一个category,其中包含 fixOrientation 方法:

@interface UIImage (fixOrientation)

- (UIImage *)fixOrientation;

@end

@implementation UIImage (fixOrientation)

  - (UIImage *)fixOrientation {

      // No-op if the orientation is already correct
      if (self.imageOrientation == UIImageOrientationUp) return self;

      // 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 (self.imageOrientation) {
         case UIImageOrientationDown:
         case UIImageOrientationDownMirrored:
             transform = CGAffineTransformTranslate(transform, self.size.width, self.size.height);
             transform = CGAffineTransformRotate(transform, M_PI);
             break;

         case UIImageOrientationLeft:
         case UIImageOrientationLeftMirrored:
             transform = CGAffineTransformTranslate(transform, self.size.width, 0);
             transform = CGAffineTransformRotate(transform, M_PI_2);
             break;

         case UIImageOrientationRight:
         case UIImageOrientationRightMirrored:
             transform = CGAffineTransformTranslate(transform, 0, self.size.height);
             transform = CGAffineTransformRotate(transform, -M_PI_2);
             break;
         case UIImageOrientationUp:
         case UIImageOrientationUpMirrored:
             break;
     }

     switch (self.imageOrientation) {
         case UIImageOrientationUpMirrored:
         case UIImageOrientationDownMirrored:
             transform = CGAffineTransformTranslate(transform, self.size.width, 0);
             transform = CGAffineTransformScale(transform, -1, 1);
             break;

         case UIImageOrientationLeftMirrored:
         case UIImageOrientationRightMirrored:
             transform = CGAffineTransformTranslate(transform, self.size.height, 0);
             transform = CGAffineTransformScale(transform, -1, 1);
             break;
         case UIImageOrientationUp:
         case UIImageOrientationDown:
         case UIImageOrientationLeft:
         case UIImageOrientationRight:
             break;
     }

     // Now we draw the underlying CGImage into a new context, applying the transform
     // calculated above.
     CGContextRef ctx = CGBitmapContextCreate(NULL, self.size.width, self.size.height,
                                              CGImageGetBitsPerComponent(self.CGImage), 0,
                                              CGImageGetColorSpace(self.CGImage),
                                              CGImageGetBitmapInfo(self.CGImage));
     CGContextConcatCTM(ctx, transform);
     switch (self.imageOrientation) {
         case UIImageOrientationLeft:
         case UIImageOrientationLeftMirrored:
         case UIImageOrientationRight:
         case UIImageOrientationRightMirrored:
             // Grr...
             CGContextDrawImage(ctx, CGRectMake(0,0,self.size.height,self.size.width), self.CGImage);
             break;

         default:
             CGContextDrawImage(ctx, CGRectMake(0,0,self.size.width,self.size.height), self.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

摄像头(相册)获取的图片上传至服务器被自动旋转了

今天写项目的时候发现, 通过相机(相册)获取到的图片显示是正的,但是上传至服务器后下次从服务器读取就被莫名其妙的旋转了,开始时候以为是服务器的原因,最后原来是我的原因:如果把通过相机获取到的图片,直接...
  • liumf_0
  • liumf_0
  • 2016年12月26日 13:52
  • 289

iOS 将相册中的图片上传至服务器

在使用app时,从相册中选取图片作为头像是很常用的操作,首先打开相册选择图片,然后将图片保存至本应用的document,最后将document中图片的路径保存至NSUserDefaults和服务器。 ...
  • worldzhy
  • worldzhy
  • 2014年11月28日 10:42
  • 49983

iOS 相机调用相册打开及图片头像的上传到服务器详解

首先要遵守代理: UIImagePickerControllerDelegate, UINavigationControllerDelegate // 创建 提示 UIAlertCo...
  • mazegong
  • mazegong
  • 2016年04月26日 09:52
  • 1464

iOS 调用相册,拍照并上传图片详解

iphone中图像通常存储在4个地方【相册、应用程序包、沙盒、Internet】,通过这4个源,我们就可以存取应用图片。   相册   iphone的相册包含摄像头胶卷+用户计算机同步的部...
  • sharmir
  • sharmir
  • 2016年01月12日 20:09
  • 3264

IOS翻转动画(可来回切换图片)

有个需求是让图片的两面显示不同的图片,点击图片时让这两张图片翻转切换,以前做这个效果的同事(已离职)专门下载了个框架,现在想想完全没必要,跟大家分享我自己写的Demo,10行代码就解决问题,具体实现代...
  • IOS_dashen
  • IOS_dashen
  • 2015年09月14日 11:40
  • 2066

Unity安卓Android与iOS保存图片并显示在相册

1.安卓 安卓手机有可能有SD卡 有可能没,如果有SD卡,直接用unity的截屏API或者Application的路径会同时保存, 下面写存在手机内部。  //存储路径destinatio...
  • u014528558
  • u014528558
  • 2017年01月23日 10:26
  • 2197

iOS中(相册)摄像头获取的图片上传至服务器被自动旋转了

今天写项目的时候发现, 通过相机(相册)获取到的图片显示是正的,但是上传至服务器后下次从服务器读取就被莫名其妙的旋转了,开始时候以为是服务器的原因,最后原来是我的原因:如果把通过相机获取到的图片,直接...
  • jiadabin
  • jiadabin
  • 2015年07月30日 14:53
  • 3054

iOS - 获取系统相册照片名称,路径以及各项信息

最近做的项目 , 在我看来都停偏的 , 因为需要的都不仅仅是展示和业务逻辑 , 而主要都是网络和存储,文件,流媒体操作方面的东西 . 所以今天想要获取下照片的名称 , 还找了挺久的 . 以此记录下 ,...
  • coderMy
  • coderMy
  • 2016年11月06日 19:20
  • 1133

iOS 把图片保存到相册,并获取图片文件名

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDic...
  • sevenquan
  • sevenquan
  • 2017年03月01日 12:58
  • 1581

iOS保存图片到新建相册(iOS Photos)

1.直接保存图片相册中(不需要自己创建新的相簿) - (void)saveImage2Photo:(UIImage *)img { UIImageWriteToSavedPhotos...
  • sdefzhpk
  • sdefzhpk
  • 2016年10月09日 09:42
  • 1585
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS上传相册图片到服务器端显示位置翻转问题
举报原因:
原因补充:

(最多只允许输入30个字)