Подтвердить что ты не робот

Цель C: Как исправить пропорции изображения (и не менять рамку изображения)

Я использую UIImagePickerController для выбора изображений для своего приложения. Однако мне приходится сталкиваться с некоторыми проблемами в отношении поддержания соотношения сторон выбранных изображений.

Например,

У меня есть необработанное изображение на телефоне следующим образом (не квадратное изображение):

enter image description here

После выбора изображения на iphone через страницу "перемещение и масштабирование" для обрезки изображения результат будет следующим: (соотношение сторон по-прежнему поддерживается здесь)

enter image description here

Мое приложение отобразит выбранное изображение в UIImageView с квадратным фреймом (200 x 200). После установки выбранного изображения в UIImageView (UIImageView.image = selectedImage) соотношение сторон изображения не поддерживается, а вместо него следует кадр UIImageView: (Изображение теперь искажено в моем UIImageView):

enter image description here

Есть ли способ сохранить соотношение сторон изображения в этом случае?

EDIT: Обновить ожидаемый результат

После некоторого размышления я понимаю, что лучший способ решить мою проблему - обеспечить, чтобы для таких изображений (не квадратные) мне нужно было "преобразовать" их в квадратные изображения, т.е. заполнить пустые пространства сверху и снизу изображений сделать квадрат, например

Ожидаемое изображение: (с добавлением верхней и нижней границ)

enter image description here

ИЗМЕНИТЬ: Обновить с помощью примера кода

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo 
{

    self.imageView.contentMode = UIViewContentModeScaleAspectFill;

    self.imageView.image = image;
    [[picker parentViewController] dismissModalViewControllerAnimated:YES];

    //Compress image
    UIImage *image = [self scaleImage:img toSize:CGSizeMake(612.0,612.0)];

    self.imageData = UIImageJPEGRepresentation(image, 0.75);
}

Добавив код "self.imageView.contentMode = UIViewContentModeScaleAspectFill;", я смог получить квадратное изображение в uiimageview

enter image description here

Но похоже, что исходное изображение все еще не было квадратным изображением, поэтому проблема перекоса все равно произойдет, когда я сделаю "UIImage * image = [self scaleImage: img toSize: CGSizeMake (612.0, 612.0)];". Правильно ли мое предположение? В любом случае, чтобы смягчить эту проблему, поскольку мне все равно придется отображать "сжатое" изображение в другом месте приложения.

4b9b3361

Ответ 1

Выполнение myImageView.contentMode = UIViewContentModeScaleAspectFit; недостаточно, потому что оно изменяет соотношение сторон изображения так, как хочет Жень, но оно не меняет исходное изображение, что и нужно Женю. Единственный способ сделать это - использовать UIGraphicsImageContext, как объясняется там: Изменить размер UIImage с соотношением сторон?

Ответ 2

Вы должны настроить свой режим контента UIImageView:

myImageView.contentMode = UIViewContentModeScaleAspectFit;

Только для ударов - проверьте документацию на константах UIViewContentMode.

Ответ 3

Вы можете установить свойство contentMode в свой экземпляр UIImageView, например:

myImageView.contentMode = UIViewContentModeScaleAspectFit;

Это заставит его сохранить пропорции изображения при масштабировании. Существует также ряд других значений, которые вы можете установить здесь для создания других видов поведения, как описано в справочной документации .