измените размер uiimage и добавьте пробелы


Я немного погуглил и, кажется, не могу найти решение. Вот в чем моя проблема. Мне нужно изменить размер UIImage до определенного размера, а именно размера, чтобы ширина и высота были степенями двух. Мои изображения поступают с камеры, поэтому размеры не являются степенями двух. Мне нужно сохранить все изображение, сохраняя при этом правильный аспект-т. е. режим подгонки аспекта. Я знаю, как изменить размер UIImage, но я не могу понять, как изменить размер изображения и добавить пробелы в верхней части и снизу соответствующим образом, чтобы сохранить правильный общий размер изображения, сохраняя при этом правильный аспект. Есть ли у кого-нибудь понимание этого?

Кстати, вот мой текущий код изменения размера (просто изменяет размер)

- (UIImage *) resizeImage:(UIImage *)initialImage
{
    CGSize newSize = CGSizeMake(256, 256);
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [initialImage drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    
    UIGraphicsEndImageContext();
    return newImage;
}

И я попытался использовать Этот блог, но он дает мне правильный размер изображения, когда я указываю UIViewContentModeScaleAspectFit для режима контента.

2 2

2 ответа:

Простой способ сделать это -

Поместите изображение в UIImageView, установите нужный размер с помощью пробела и белого цвета backgournd, затем установите режим UIViewContentModeScaleAspectFit

Затем превратите его в UIImage

UIImageView *imageView = [[UIImageView alloc] initWithFrame:yourFrame];
imageView.image = yourImage;
imageView.contentMode = UIViewContentModeScaleAspectFit ;
imageView.backgroundColor = [UIColor whiteColor];

UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, imageView.opaque, 0.0);
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
//the image you want
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

У тебя получилось

Решение, которое у вас есть, уже в основном там. Просто измените rect на [initialImage drawInRect:]. Решение будет выглядеть примерно так (не проверено!):

CGSize size = initialImage.size;
CGFloat max = (size.width > size.height) ? size.width : size.height;
CGSize newSize = CGSizeMake(size.width * newSize.width / max, size.height * newSize.height / max);
CGRect rect = CGRectMake((newSize.width-newSize.width)/2.0,
                         (newSize.height-newSize.height)/2.0,
                         newSize.width, newSize.height);
[initialImage drawInRect:rect];