IOS 拍照转90°,矫正图片方法

- (UIImage *)fixOrientation:(UIImage *)srcImg {

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

    CGAffineTransform transform = CGAffineTransformIdentity;

    switch (srcImg.imageOrientation) {

        case UIImageOrientationDown:

        case UIImageOrientationDownMirrored:

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

             transform = CGAffineTransformRotate(transform, M_PI);

              break;

        case UIImageOrientationLeft:

        case UIImageOrientationLeftMirrored:

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

            transform = CGAffineTransformRotate(transform, M_PI_2);

            break;

        case UIImageOrientationRight:

        case UIImageOrientationRightMirrored:

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

            transform = CGAffineTransformRotate(transform, -M_PI_2);

            break;

        case UIImageOrientationUp:

        case UIImageOrientationUpMirrored:

            break;

    }

    switch (srcImg.imageOrientation) {

        case UIImageOrientationUpMirrored:

        case UIImageOrientationDownMirrored:

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

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

            break;

        case UIImageOrientationLeftMirrored:

        case UIImageOrientationRightMirrored:

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

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

            break;

        case UIImageOrientationUp:

        case UIImageOrientationDown:

        case UIImageOrientationLeft:

        case UIImageOrientationRight:

            break;

    }

    CGContextRef ctx = CGBitmapContextCreate(NULL, srcImg.size.width, srcImg.size.height, CGImageGetBitsPerComponent(srcImg.CGImage), 0, CGImageGetColorSpace(srcImg.CGImage), CGImageGetBitmapInfo(srcImg.CGImage));

    CGContextConcatCTM(ctx, transform);

    switch (srcImg.imageOrientation) {

        case UIImageOrientationLeft:

        case UIImageOrientationLeftMirrored:

        case UIImageOrientationRight:

        case UIImageOrientationRightMirrored:

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

            break;

        default:

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

            break;

    }

    CGImageRef cgimg = CGBitmapContextCreateImage(ctx);

    UIImage *img = [UIImage imageWithCGImage:cgimg];

    CGContextRelease(ctx);

    CGImageRelease(cgimg);

    return img;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容