Как уменьшить качество / размер изображения в iPhone target-c? - PullRequest
12 голосов
/ 17 января 2010

У меня есть приложение, которое позволяет пользователю делать снимки с его / ее 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 ]

16 голосов
/ 17 января 2010

Вы можете создать графический контекст, нарисовать изображение в нужном масштабе и использовать возвращаемое изображение. Например:

UIGraphicsBeginImageContext(CGSizeMake(480,320));

CGContextRef            context = UIGraphicsGetCurrentContext();

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

UIImage        *smallImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();    
15 голосов
/ 13 января 2012

Я знаю, что этот вопрос уже решен, но если кто-то (как и я) хочет масштабировать изображение, сохраняя соотношение сторон, этот код может быть полезен:

-(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;
}
3 голосов
/ 09 апреля 2011

Используйте contentOfFile и убедитесь, что все ваши изображения .png. Apple оптимизирована для png.

О, используйте contentOfFile, а не метод imageName. Несколько причин для этого. Изображения, занесенные в память ImageName, остаются в памяти даже после вызова [release].

Не спрашивайте, почему. Яблоко сказал мне об этом.

Ройделл Кларк

...