美文网首页
IOS 拍照转90°,矫正图片方法

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

作者: 赖床综合症 | 来源:发表于2016-07-28 10:23 被阅读47次

- (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;

}

相关文章

网友评论

      本文标题:IOS 拍照转90°,矫正图片方法

      本文链接:https://www.haomeiwen.com/subject/ymlajttx.html