处理从系统获取的照片方向

2017-03-03  本文已影响0人  阿良天界

#pragma mark-处理获取中照片的方向

- (UIImage *)fixOrientation {

// No-op if the orientation is already correct

if (_selectImage.imageOrientation == UIImageOrientationUp) return _selectImage;

// 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 (_selectImage.imageOrientation) {

case UIImageOrientationDown:

case UIImageOrientationDownMirrored:

transform = CGAffineTransformTranslate(transform, _selectImage.size.width, _selectImage.size.height);

transform = CGAffineTransformRotate(transform, M_PI);

break;

case UIImageOrientationLeft:

case UIImageOrientationLeftMirrored:

transform = CGAffineTransformTranslate(transform, _selectImage.size.width, 0);

transform = CGAffineTransformRotate(transform, M_PI_2);

break;

case UIImageOrientationRight:

case UIImageOrientationRightMirrored:

transform = CGAffineTransformTranslate(transform, 0, _selectImage.size.height);

transform = CGAffineTransformRotate(transform, -M_PI_2);

break;

case UIImageOrientationUp:

case UIImageOrientationUpMirrored:

break;

}

switch (_selectImage.imageOrientation) {

case UIImageOrientationUpMirrored:

case UIImageOrientationDownMirrored:

transform = CGAffineTransformTranslate(transform, _selectImage.size.width, 0);

transform = CGAffineTransformScale(transform, -1, 1);

break;

case UIImageOrientationLeftMirrored:

case UIImageOrientationRightMirrored:

transform = CGAffineTransformTranslate(transform, _selectImage.size.height, 0);

transform = CGAffineTransformScale(transform, -1, 1);

break;

case UIImageOrientationUp:

case UIImageOrientationDown:

case UIImageOrientationLeft:

case UIImageOrientationRight:

break;

}

// Now we draw the underlying CGImage into a new context, applying the transform

// calculated above.

CGContextRef ctx = CGBitmapContextCreate(NULL, _selectImage.size.width, _selectImage.size.height,

CGImageGetBitsPerComponent(_selectImage.CGImage), 0,

CGImageGetColorSpace(_selectImage.CGImage),

CGImageGetBitmapInfo(_selectImage.CGImage));

CGContextConcatCTM(ctx, transform);

switch (_selectImage.imageOrientation) {

case UIImageOrientationLeft:

case UIImageOrientationLeftMirrored:

case UIImageOrientationRight:

case UIImageOrientationRightMirrored:

// Grr...

CGContextDrawImage(ctx, CGRectMake(0,0,_selectImage.size.height,_selectImage.size.width), _selectImage.CGImage);

break;

default:

CGContextDrawImage(ctx, CGRectMake(0,0,_selectImage.size.width,_selectImage.size.height), _selectImage.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;

}

上一篇下一篇

猜你喜欢

热点阅读