измените размер 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 ответа:
Простой способ сделать это -
Поместите изображение в 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];