如何在iPhone objective-c中降低图像质量/尺寸?

时间:2010-01-17 00:43:16

标签: objective-c ios uiimage uiimagepickercontroller

我有一个应用程序,让用户可以用他/她的iPhone拍照,并将其用作应用程序的背景图像。我使用UIImagePickerController让用户拍照并将背景UIImageView图片设置为返回的UIImage对象。

IBOutlet UIImageView *backgroundView;

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
 backgroundView.image = image;
 [self dismissModalViewControllerAnimated:YES];
}

一切正常。 如何将UIImage的大小减小到480x320,以便我的应用程序可以节省内存? 我不在乎我是否放弃任何图像质量。

提前致谢。

3 个答案:

答案 0 :(得分:16)

您可以创建图形上下文,将图像绘制为所需比例的图像,然后使用返回的图像。例如:

UIGraphicsBeginImageContext(CGSizeMake(480,320));

CGContextRef            context = UIGraphicsGetCurrentContext();

[image drawInRect: CGRectMake(0, 0, 480, 320)];

UIImage        *smallImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();    

答案 1 :(得分:15)

我知道这个问题已经解决了,但是如果某人(像我一样)想要保持纵横比来缩放图像,这段代码可能会有所帮助:

-(UIImage *)resizeImage:(UIImage *)image toSize:(CGSize)size
{
    float width = size.width;
    float height = size.height;

    UIGraphicsBeginImageContext(size);
    CGRect rect = CGRectMake(0, 0, width, height);

    float widthRatio = image.size.width / width;
    float heightRatio = image.size.height / height; 
    float divisor = widthRatio > heightRatio ? widthRatio : heightRatio;

    width = image.size.width / divisor; 
    height = image.size.height / divisor;

    rect.size.width  = width;
    rect.size.height = height;

    if(height < width)
        rect.origin.y = height / 3;

    [image drawInRect: rect];

    UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();   

    return smallImage;
}

答案 2 :(得分:3)

使用contentOfFile并确保您的所有图片都是.png。 Apple针对png进行了优化。

哦,使用contentOfFile而不是imageName方法。有几个原因。即使在调用[release]之后,ImageName带入内存的图像仍保留在内存中。

不要问我为什么。苹果告诉我了。

Roydell Clarke