iOS 解决图片上传后逆时针旋转90度的问题

来源:互联网 发布:对网络教育的看法作文 编辑:程序博客网 时间:2024/06/06 02:05

写一个分类:

#import "UIImage+Orientation.h"@implementation UIImage (Orientation)+ (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;}@end

这个方法是在从相册获取照片的时候调用的,如果你把照片写到沙盒中,这个方法就失效了。

阅读全文
0 0
原创粉丝点击