UIImage方向控制

github上一段控制UIImage方向的代碼------------->

+ (UIImage *)fixOrientation:(UIImage *)img {

    

    // No-op if the orientation is already correct

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

    

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

        case UIImageOrientationDown:

        case UIImageOrientationDownMirrored:

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

            transform = CGAffineTransformRotate(transform, M_PI);

            break;

            

        case UIImageOrientationLeft:

        case UIImageOrientationLeftMirrored:

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

            transform = CGAffineTransformRotate(transform, M_PI_2);

            break;

            

        case UIImageOrientationRight:

        case UIImageOrientationRightMirrored:

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

            transform = CGAffineTransformRotate(transform, -M_PI_2);

            break;

        case UIImageOrientationUp:

        case UIImageOrientationUpMirrored:

            break;

    }

    

    switch (img.imageOrientation) {

        case UIImageOrientationUpMirrored:

        case UIImageOrientationDownMirrored:

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

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

            break;

            

        case UIImageOrientationLeftMirrored:

        case UIImageOrientationRightMirrored:

            transform = CGAffineTransformTranslate(transform, img.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, img.size.width, img.size.height,

                                             CGImageGetBitsPerComponent(img.CGImage), 0,

                                             CGImageGetColorSpace(img.CGImage),

                                             CGImageGetBitmapInfo(img.CGImage));

    CGContextConcatCTM(ctx, transform);

    switch (img.imageOrientation) {

        case UIImageOrientationLeft:

        case UIImageOrientationLeftMirrored:

        case UIImageOrientationRight:

        case UIImageOrientationRightMirrored:

            // Grr...

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

            break;

            

        default:

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

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章