ios上传图片到服务器后方向不对

静下的心
  • 17
        UIImage *tempImage = [UIImage imageWithCGImage:imageRef];
        NSLog(@"--- %d",tempImage.imageOrientation);
        //需要按照旋转后的方向重置图片的方向
        UIImage *croppedImage = [UIImage imageWithCGImage:imageRef scale:1.0 orientation:UIImageOrientationRight];
        NSLog(@"--- %d",cropped.imageOrientation);
        CGImageRelease(imageRef);

        //获得图片的data
        NSData *data = UIImageJPEGRepresentation(croppedImage, 0.5);

这个时候把data上传到服务器,返回的链接找到的图片始终是up方向的,这是为什么!上传图片之前我已经修改图片的方向了啊
备注:安卓的同事,旋转之后上传图片就是正常的,这个应该是我们客户端的问题吧!

回复
阅读 15.7k
4 个回答

后来找到问题了,上面这个是我写错了,newImage就是croppedImage!

问题解决了,我简答说下思路,大家可以参考下

背景:项目中有个上传图片的功能,图片可以从相册或者照相获取,可以对图片进行旋转和裁剪!在此Demo上进行修改:https://github.com/myang-git/iOS-Image-Crop-View
开始操作的流程,直说重点:

  1. UIImage在展示前会执行一个方法 self.image = [UIImage fixOrientation:image]; //因为从相册或者照相获取的图片方向可能不是肖像方向,只有方向为UIImageOrientationUp的时候,坐标系才是在左上角,所以其它方向的图片要处理,保证方向是在左上角,大家可以看看方法的具体实现;
  2. 调用截图方法:CGImageRef imageRef = CGImageCreateWithImageInRect([self.image CGImage], CropRect);方法中第二个参数就是CGRect,这个坐标是相对于图片本身方向的,如果图片本身方向没有修正,截图的时候就会出现问题。大家可以试一试,这也是第一步做的原因。
  3. 旋转的时候,直接旋转图片,图片的方向会重新不正常,截图的坐标依然有问题!所以我的思路是旋转了UIImageView,并在旋转的时候记录下旋转的方向。最终的 UIImage *finalImaage = [UIImage imageWithCGImage:imageRef scale:1.0 orientation:finnalOrientation];imageRef:为2中截取后的图片,finnalOrientation这个参数是用来记录旋转方向的。
  4. 最后把图片上传服务器之前,如果不调用[UIImage fixOrientation:image],则服务端返回的图片始终是正方向,调用之后则正常。

应该是 NSData *data = UIImageJPEGRepresentation(newImage, 0.5); 吧

之前碰到过这个问题,是UIImageJPEGRepresentation方法造成的。
你自己回答的是一种解决方案,还有一种方案,在上传到云服务时带着方向参数。
比如我用又拍云的iOS sdk(form api),只需要把x-gmkerl-rotate参数设置为auto即可(默认为空)

如果你在意图片的方向, 并试图对其做出改变, 请查阅图像文件的Exif数据. 然后对其中的方向做出辅助调整.

顺便赞一下 markdown 文档支持

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏