2011-09-22 105 views
3

我想调整UIImage的大小,使其保持一定的宽度和高度,以保持比例不变。要做到这一点最简单的方法是:调整UIImage的速度最快,效率最高的方式

CGSize newSize = CGSizeMake(726, 521); 
    UIGraphicsBeginImageContext(newSize); 
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 
    UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext();  
    UIGraphicsEndImageContext(); 

请问上面的方法在图像质量和所花费的时间方面的任何缺点?什么是比上述方法更好的方法?

编辑:

这个怎么样:

- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize { 

    UIImage *sourceImage = self; 
    UIImage *newImage = nil; 

    CGSize imageSize = sourceImage.size; 
    CGFloat width = imageSize.width; 
    CGFloat height = imageSize.height; 

    CGFloat targetWidth = targetSize.width; 
    CGFloat targetHeight = targetSize.height; 

    CGFloat scaleFactor = 0.0; 
    CGFloat scaledWidth = targetWidth; 
    CGFloat scaledHeight = targetHeight; 

    CGPoint thumbnailPoint = CGPointMake(0.0,0.0); 

    if (CGSizeEqualToSize(imageSize, targetSize) == NO) { 

     CGFloat widthFactor = targetWidth/width; 
     CGFloat heightFactor = targetHeight/height; 

     if (widthFactor < heightFactor) 
      scaleFactor = widthFactor; 
     else 
      scaleFactor = heightFactor; 

     scaledWidth = width * scaleFactor; 
     scaledHeight = height * scaleFactor; 

     // center the image 

     if (widthFactor < heightFactor) { 
      thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 
     } else if (widthFactor > heightFactor) { 
      thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5; 
     } 
    } 


    // this is actually the interesting part: 

    UIGraphicsBeginImageContext(targetSize); 

    CGRect thumbnailRect = CGRectZero; 
    thumbnailRect.origin = thumbnailPoint; 
    thumbnailRect.size.width = scaledWidth; 
    thumbnailRect.size.height = scaledHeight; 

    [sourceImage drawInRect:thumbnailRect]; 

    newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    if(newImage == nil) NSLog(@"could not scale image"); 


    return newImage ; 
} 

回答

8

见本文 “的UIImage +调整大小” 部分:Resize a UIImage the right way约插值质量和保持纵横比。

+0

+1这是一篇关于调整图像大小的精彩文章,并强调如果您不小心,您可以轻松做到这一点。 – Sam

0

这里有一个简单的方法:

UIImage * image = [UIImage imageNamed:@"image"]; 
    CGSize sacleSize = CGSizeMake(10, 10); // scale image to 10 x 10 
    UIGraphicsBeginImageContextWithOptions(sacleSize, NO, 0.0); 
    [image drawInRect:CGRectMake(0, 0, sacleSize.width, sacleSize.height)]; 
    UIImage * resizedImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

resizedImage是一个新的形象。