2011-09-22 89 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是一個新的形象。