问题描述:手机头像上传,遇到一个怪现象,就是拍照上传时,手机端显示头像正常,但在web端查看会有一个左旋90度的问题。并且照片竖怕才会有此问题,横拍不存在。 原因分析:手机拍照时,用相机拍摄出来的照片是含有EXIF信息的,在我们得到 UIImage时,可以查看此Image的i ...
问题描述:
手机头像上传,遇到一个怪现象,就是拍照上传时,手机端显示头像正常,但在web端查看会有一个左旋90度的问题。
并且照片竖怕才会有此问题,横拍不存在。
原因分析:
手机拍照时,用相机拍摄出来的照片是含有EXIF信息的,在我们得到 UIImage时,可以查看此Image的imageOrientation属性,其实就是指的EXIF中的orientation信息。
如果我们忽略orientation信息,而直接对照片进行像素处理或上传等操作,得到的结果是翻转或者旋转90之后的样子。
这是因为我们执行像素处理或者drawInRect等操作之后,imageOrientaion信息被删除了,imageOrientaion被重设为0,造成照片内容和imageOrientaion不匹配。
所以,在对照片进行处理之前,先将照片旋转到正确的方向,保证返回的imageOrientaion为0。
解决方法:
Swift版:
/** 照片竖拍 web显示旋转解决:图片大于2M会自动旋转90度 - parameter aImage: <#aImage description#> - returns: <#return value description#> */ class func fixOrientation(aImage:UIImage)->UIImage { if aImage.imageOrientation == UIImageOrientation.Up{ return aImage } var transform = CGAffineTransformIdentity switch (aImage.imageOrientation) { case .Down,.DownMirrored: transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height) transform = CGAffineTransformRotate(transform, CGFloat(M_PI)) break; case .Left,.LeftMirrored: transform = CGAffineTransformTranslate(transform, aImage.size.width, 0) transform = CGAffineTransformRotate(transform, CGFloat(M_PI_2)) break; case .Right,.RightMirrored: transform = CGAffineTransformTranslate(transform, 0, aImage.size.height) transform = CGAffineTransformRotate(transform, CGFloat(-M_PI_2)) break; default: break; } switch (aImage.imageOrientation) { case .UpMirrored,.DownMirrored: transform = CGAffineTransformTranslate(transform, aImage.size.width, 0) transform = CGAffineTransformScale(transform, -1, 1) break; case .LeftMirrored,.RightMirrored: transform = CGAffineTransformTranslate(transform, aImage.size.height, 0) transform = CGAffineTransformScale(transform, -1, 1) break; default: break; } let ctx:CGContextRef = CGBitmapContextCreate(nil, Int(aImage.size.width), Int(aImage.size.height), CGImageGetBitsPerComponent(aImage.CGImage), 0, CGImageGetColorSpace(aImage.CGImage), 1)! CGContextConcatCTM(ctx, transform) switch (aImage.imageOrientation) { case .Left,.LeftMirrored,.Right,.RightMirrored: CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage) break; default: CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.width,aImage.size.height), aImage.CGImage); break; } let cgimg:CGImageRef = CGBitmapContextCreateImage(ctx)! let img:UIImage = UIImage(CGImage: cgimg) return img; }
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:iOS拍照上传后,在web端显示旋转 Swift+OC版解决方案
关键词:IOS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。