Return to Snippet

Revision: 27102
at May 22, 2010 10:21 by aviddv1


Initial Code
- (UIImage*)straightenAndScaleImage:(UIImage *)theFullImage andTheMaxDimension:(int)maxDimension
{
	
	CGImageRef img = [theFullImage CGImage];
	CGFloat width = CGImageGetWidth(img);
	CGFloat height = CGImageGetHeight(img);
	CGRect bounds = CGRectMake(0, 0, width, height);
	CGSize size = bounds.size;
	if (width > maxDimension || height > maxDimension) {
    CGFloat ratio = width/height;
    if (ratio > 1.0f) {
			size.width = maxDimension;
			size.height = size.width / ratio;
    }
    else {
			size.height = maxDimension;
			size.width = size.height * ratio;
    }
	} 
	
	CGFloat scale = size.width/width;
	CGAffineTransform transform = orientationTransformForImage(theFullImage, &size);

	//CGAffineTransform transform = orientationTransformForImage(theFullImage, &size);
	UIGraphicsBeginImageContext(size);
	CGContextRef context = UIGraphicsGetCurrentContext();
	// Flip 
	UIImageOrientation orientation = [theFullImage imageOrientation];
	if (orientation == UIImageOrientationRight || orientation == UIImageOrientationLeft) {
		
    CGContextScaleCTM(context, -scale, scale);
    CGContextTranslateCTM(context, -height, 0);
	}else {
    CGContextScaleCTM(context, scale, -scale);
    CGContextTranslateCTM(context, 0, -height);
	}
	CGContextConcatCTM(context, transform);
	CGContextDrawImage(context, bounds, img);
	UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
	UIGraphicsEndImageContext();
	return newImage;
}

CGAffineTransform orientationTransformForImage(UIImage *image, CGSize *newSize) {
	CGImageRef img = [image CGImage];
	CGFloat width = CGImageGetWidth(img);
	CGFloat height = CGImageGetHeight(img);
	CGSize size = CGSizeMake(width, height);
	CGAffineTransform transform = CGAffineTransformIdentity;
	CGFloat origHeight = size.height;
	UIImageOrientation orient = image.imageOrientation;
	switch(orient) { /* EXIF 1 to 8 */
		case UIImageOrientationUp:
			break;
		case UIImageOrientationUpMirrored:
			transform = CGAffineTransformMakeTranslation(width, 0.0f);
			transform = CGAffineTransformScale(transform, -1.0f, 1.0f);
			break;
		case UIImageOrientationDown:
			transform = CGAffineTransformMakeTranslation(width, height);
			transform = CGAffineTransformRotate(transform, M_PI);
			break;
		case UIImageOrientationDownMirrored:
			transform = CGAffineTransformMakeTranslation(0.0f, height);
			transform = CGAffineTransformScale(transform, 1.0f, -1.0f);
			break;
		case UIImageOrientationLeftMirrored:
			size.height = size.width;
			size.width = origHeight;
			transform = CGAffineTransformMakeTranslation(height, width);
			transform = CGAffineTransformScale(transform, -1.0f, 1.0f);
			transform = CGAffineTransformRotate(transform, 3.0f * M_PI / 2.0f);
			break;
		case UIImageOrientationLeft:
			size.height = size.width;
			size.width = origHeight;
			transform = CGAffineTransformMakeTranslation(0.0f, width);
			transform = CGAffineTransformRotate(transform, 3.0f * M_PI / 2.0f);
			break;
		case UIImageOrientationRightMirrored:
			size.height = size.width;
			size.width = origHeight;
			transform = CGAffineTransformMakeScale(-1.0f, 1.0f);
			transform = CGAffineTransformRotate(transform, M_PI / 2.0f);
			break;
		case UIImageOrientationRight:
			size.height = size.width;
			size.width = origHeight;
			transform = CGAffineTransformMakeTranslation(height, 0.0f);
			transform = CGAffineTransformRotate(transform, M_PI / 2.0f);
			break;
		default:
			;
	}
	*newSize = size;
	return transform;
}

Initial URL


Initial Description
Usage: 	[self straightenAndScaleImage:imageView.image andTheMaxDimension:100];

Initial Title
Straighten and Scale UIImage

Initial Tags


Initial Language
Objective C