首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

照相图片方向修正

2012-07-03 
拍照图片方向修正+ (UIImage *)rotateImage:(UIImage *)aImage {CGImageRef imgRef aImage.CGImageCGFl

拍照图片方向修正

+ (UIImage *)rotateImage:(UIImage *)aImage {    CGImageRef imgRef = aImage.CGImage;    CGFloat width = CGImageGetWidth(imgRef);    CGFloat height = CGImageGetHeight(imgRef);    CGAffineTransform transform = CGAffineTransformIdentity;    CGRect bounds = CGRectMake(0, 0, width, height);    CGFloat scaleRatio = 1;    CGFloat boundHeight;    UIImageOrientation orient = aImage.imageOrientation;    switch(orient) {        case UIImageOrientationUp: //EXIF = 1            transform = CGAffineTransformIdentity;            break;        case UIImageOrientationUpMirrored: //EXIF = 2            transform = CGAffineTransformMakeTranslation(width, 0.0);            transform = CGAffineTransformScale(transform, -1.0, 1.0);            break;        case UIImageOrientationDown: //EXIF = 3            transform = CGAffineTransformMakeTranslation(width, height);            transform = CGAffineTransformRotate(transform, M_PI);            break;        case UIImageOrientationDownMirrored: //EXIF = 4            transform = CGAffineTransformMakeTranslation(0.0, height);            transform = CGAffineTransformScale(transform, 1.0, -1.0);            break;        case UIImageOrientationLeftMirrored: //EXIF = 5            boundHeight = bounds.size.height;            bounds.size.height = bounds.size.width;            bounds.size.width = boundHeight;            transform = CGAffineTransformMakeTranslation(height, width);            transform = CGAffineTransformScale(transform, -1.0, 1.0);            transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);            break;        case UIImageOrientationLeft: //EXIF = 6            boundHeight = bounds.size.height;            bounds.size.height = bounds.size.width;            bounds.size.width = boundHeight;            transform = CGAffineTransformMakeTranslation(0.0, width);            transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);            break;        case UIImageOrientationRightMirrored: //EXIF = 7            boundHeight = bounds.size.height;            bounds.size.height = bounds.size.width;            bounds.size.width = boundHeight;            transform = CGAffineTransformMakeScale(-1.0, 1.0);            transform = CGAffineTransformRotate(transform, M_PI / 2.0);            break;        case UIImageOrientationRight: //EXIF = 8            boundHeight = bounds.size.height;            bounds.size.height = bounds.size.width;            bounds.size.width = boundHeight;            transform = CGAffineTransformMakeTranslation(height, 0.0);            transform = CGAffineTransformRotate(transform, M_PI / 2.0);            break;        default:            [NSException raise:NSInternalInconsistencyException format:@"Invalid image orientation"];    }    UIGraphicsBeginImageContext(bounds.size);    CGContextRef context = UIGraphicsGetCurrentContext();    if (orient == UIImageOrientationRight || orient == UIImageOrientationLeft) {        CGContextScaleCTM(context, -scaleRatio, scaleRatio);        CGContextTranslateCTM(context, -height, 0);    } else {        CGContextScaleCTM(context, scaleRatio, -scaleRatio);        CGContextTranslateCTM(context, 0, -height);    }    CGContextConcatCTM(context, transform);    CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef);    UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return imageCopy;}

热点排行