How do I reduce Image quality/size in iPhone objective-c?

前端 未结 3 1797
甜味超标
甜味超标 2020-12-09 05:29

I have an app that lets the user take a picture with his/her iPhone and use it as a background image for the app. I use UIImagePickerController to let the user

相关标签:
3条回答
  • 2020-12-09 06:02

    You can create a graphics context, draw the image into that at the desired scale, and use the returned image. For example:

    UIGraphicsBeginImageContext(CGSizeMake(480,320));
    
    CGContextRef            context = UIGraphicsGetCurrentContext();
    
    [image drawInRect: CGRectMake(0, 0, 480, 320)];
    
    UIImage        *smallImage = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();    
    
    0 讨论(0)
  • 2020-12-09 06:06

    Use contentOfFile and make sure that all of your images are .png. Apple is optimized for png.

    Oh, use the contentOfFile not the imageName method. Several reasons for that. Images that is brought in memory by ImageName remained in memory even after a [release] is called.

    Dont ask my why. The apple told me so.

    Roydell Clarke

    0 讨论(0)
  • 2020-12-09 06:13

    I know this question is already solved, but just if someone (like i did) wants to scale the image keeping the aspect ratio, this code might be helpful:

    -(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;
    }
    
    0 讨论(0)
提交回复
热议问题