最近做了个有关图像处理的APP,里面涉及到拍照和从相册读图,测试时发现一个神奇的问题。
当我用后置摄像头拍照,然后将拍摄到的图片显示在APP界面上时,图片一切正常,然后读取图片像素信息,再用像素信息生成图片,按理说,新生成的图像和原图像应该是一样的,但是新生成的图片自动向左旋转了90度,如果把手机向左横过来拍照,处理后的照片倒是不旋转。上网搜了这个问题,没有直接的回答,有可能是因为我的问题描述的不够清晰,后面机缘巧合看到一篇博客,提到:
iPhone拍出的图像,包含一个属性:imageOrientation,这个属性有:
typedef NS_ENUM(NSInteger, UIImageOrientation) {
UIImageOrientationUp, // default orientation
UIImageOrientationDown, // 180 deg rotation
UIImageOrientationLeft, // 90 deg CCW
UIImageOrientationRight, // 90 deg CW
UIImageOrientationUpMirrored, // as above but image mirrored along other axis. horizontal flip
UIImageOrientationDownMirrored, // horizontal flip
UIImageOrientationLeftMirrored, // vertical flip
UIImageOrientationRightMirrored, // vertical flip
};
前四个好理解,就是正向、顺时针或逆时针转90度、逆时针旋转90度、顺时针旋转90度;后四个其实就是在前四个的基础上以中线为基准水平镜像、垂直镜像。被我处理过的UIImage不再有imageOrientation这个属性了,所以就按照UIImageOrientationUp默认正向显示了。所有,在获取到图像时,利用CGContext将它转正了,就OK了!