您的位置:首页 > 其它

使用相机拍照获取图片后 有时候图像显示旋转

2016-01-30 09:47 513 查看
发现直接拍照获取图片在截取图像的时候不正确,后来发现获取的image 没有设置相机的拍照方向

#import <UIKit/UIKit.h>
@interface UIImage (reviseImage)
+ (UIImage *)image:(UIImage *)image rotation:(UIImageOrientation)orientation;
@end

#import "UIImage+reviseImage.h"
@implementation UIImage (reviseImage)
//改正拍照时图片的方向
+ (UIImage *)image:(UIImage *)image rotation:(UIImageOrientation)orientation
{
long
double rotate = 0.0;
CGRect rect;
float translateX =
0;
float translateY =
0;
float scaleX =
1.0;
float scaleY =
1.0;
switch (orientation) {
case
UIImageOrientationLeft:
rotate = M_PI_2;
rect = CGRectMake(0,
0, image.size.height, image.size.width);
translateX = 0;
translateY = -rect.size.width;
scaleY = rect.size.width/rect.size.height;
scaleX = rect.size.height/rect.size.width;
break;
case
UIImageOrientationRight:
rotate = 3 *
M_PI_2;
rect = CGRectMake(0,
0, image.size.width, image.size.height);
translateX = -rect.size.height;
translateY = 0;
scaleY = rect.size.width/rect.size.height;
scaleX = rect.size.height/rect.size.width;
break;
case
UIImageOrientationDown:
rotate = M_PI;
rect = CGRectMake(0,
0, image.size.width, image.size.height);
translateX = -rect.size.width;
translateY = -rect.size.height;
break;
default:
rotate = 0.0;
rect = CGRectMake(0,
0, image.size.width, image.size.height);
translateX = 0;
translateY = 0;
break;
}
UIGraphicsBeginImageContext(rect.size);
CGContextRef context =
UIGraphicsGetCurrentContext();
//做CTM变换
CGContextTranslateCTM(context,
0.0, rect.size.height);
CGContextScaleCTM(context,
1.0, -1.0);
CGContextRotateCTM(context, rotate);
CGContextTranslateCTM(context, translateX, translateY);
CGContextScaleCTM(context, scaleX, scaleY);
//绘制图片
CGContextDrawImage(context,
CGRectMake(0,
0, rect.size.width, rect.size.height),
image.CGImage);
UIImage *newPic =
UIGraphicsGetImageFromCurrentImageContext();
return newPic;
}
@end

根据自己的需求 研究一下CTM变换 修改参数

case UIImageOrientationRight:
rotate = 3 * M_PI_2;
rect = CGRectMake(0, 0, image.size.height, image.size.width);
translateX = -rect.size.height;
translateY = 0;
scaleY = rect.size.width/rect.size.height;
scaleX = rect.size.height/rect.size.width;
break;

最后注意 相机在头向右的时候为默认方向 向上的时候为向右偏方向
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: