IOS-解决自定义UIImagePickerController 后的图片翻转问题
2014-07-03 10:00
501 查看
使用自定义UIImagePickerController,拍照后得到的图片显示的是翻转的图片,使用下列的方法可调整过来
//图片旋转
- (UIImage *)fixOrientation:(UIImage *)aImage
{
// No-op if the orientation is already correct
if (aImage.imageOrientation ==
UIImageOrientationUp)
return aImage;
// 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 (aImage.imageOrientation) {
case
UIImageOrientationDown:
case
UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);
transform = CGAffineTransformRotate(transform,
M_PI);
break;
case
UIImageOrientationLeft:
case
UIImageOrientationLeftMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width,
0);
transform = CGAffineTransformRotate(transform,
M_PI_2);
break;
case
UIImageOrientationRight:
case
UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform,
0, aImage.size.height);
transform = CGAffineTransformRotate(transform, -M_PI_2);
break;
default:
break;
}
switch (aImage.imageOrientation) {
case
UIImageOrientationUpMirrored:
case
UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width,
0);
transform = CGAffineTransformScale(transform, -1,
1);
break;
case
UIImageOrientationLeftMirrored:
case
UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.height,
0);
transform = CGAffineTransformScale(transform, -1,
1);
break;
default:
break;
}
// Now we draw the underlying CGImage into a new context, applying the transform
// calculated above.
CGContextRef ctx = CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,
CGImageGetBitsPerComponent(aImage.CGImage),
0,
CGImageGetColorSpace(aImage.CGImage),
CGImageGetBitmapInfo(aImage.CGImage));
CGContextConcatCTM(ctx, transform);
switch (aImage.imageOrientation) {
case
UIImageOrientationLeft:
case
UIImageOrientationLeftMirrored:
case
UIImageOrientationRight:
case
UIImageOrientationRightMirrored:
// Grr...
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;
}
// 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;
}
//图片旋转
- (UIImage *)fixOrientation:(UIImage *)aImage
{
// No-op if the orientation is already correct
if (aImage.imageOrientation ==
UIImageOrientationUp)
return aImage;
// 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 (aImage.imageOrientation) {
case
UIImageOrientationDown:
case
UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);
transform = CGAffineTransformRotate(transform,
M_PI);
break;
case
UIImageOrientationLeft:
case
UIImageOrientationLeftMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width,
0);
transform = CGAffineTransformRotate(transform,
M_PI_2);
break;
case
UIImageOrientationRight:
case
UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform,
0, aImage.size.height);
transform = CGAffineTransformRotate(transform, -M_PI_2);
break;
default:
break;
}
switch (aImage.imageOrientation) {
case
UIImageOrientationUpMirrored:
case
UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width,
0);
transform = CGAffineTransformScale(transform, -1,
1);
break;
case
UIImageOrientationLeftMirrored:
case
UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.height,
0);
transform = CGAffineTransformScale(transform, -1,
1);
break;
default:
break;
}
// Now we draw the underlying CGImage into a new context, applying the transform
// calculated above.
CGContextRef ctx = CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,
CGImageGetBitsPerComponent(aImage.CGImage),
0,
CGImageGetColorSpace(aImage.CGImage),
CGImageGetBitmapInfo(aImage.CGImage));
CGContextConcatCTM(ctx, transform);
switch (aImage.imageOrientation) {
case
UIImageOrientationLeft:
case
UIImageOrientationLeftMirrored:
case
UIImageOrientationRight:
case
UIImageOrientationRightMirrored:
// Grr...
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;
}
// 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;
}
相关文章推荐
- iOS App内存优化之 解决UIImagePickerController的图片对象占用RAM过高问题
- 临时解决UIImagePickerController在可编辑模式下选择相册图片后不能上移的bug
- 使用线程加载UIImagePickerController,解决卡屏问题
- ios UIImagePickerController 添加一个自定义的view
- IOS 横屏中添加UIImagePickerController获取系统图片
- iphone UIImagePickerController组件图片旋转问题
- ios UIImagePickerController 添加一个自定义的view。
- 关于将系统自带的UIImagePickerController 作为uitabbarcontroller时 present时出现问题的解决
- iOS 横屏中添加UIImagePickerController获取系统图片
- iOS开发-使用UIImagePickerController遇到的问题
- iOS 获取图片的三种方法 UIImagePickerController
- IOS_将GPS等EXIF信息写进任意JPEG图片(不依托UIImagePickerController)
- 使用线程加载UIImagePickerController,解决卡屏问题
- ios中UIImagePickerController 图片选取器的使用
- 使用UIImagePickerController时3DTouch引起的Crash问题的解决
- IOS UIImagePickerController 保存图片到 相册
- ios actionsheet 跟 imagepickercontroller冲突的问题解决方法
- ios调用UIImagePickerController crash的问题
- Cloning UIImagePickerController using the Assets Library Framework--多选图片ios
- ios 使用UIImagePickerController 打开图片库和相机选择图片修改头像(iphone版本)