Цель C: Как исправить соотношение сторон изображения (а не изменить, чтобы соответствовать рамке просмотра изображения) - PullRequest
21 голосов
/ 13 июля 2011

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

Например,

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

enter image description here

После выбора изображения на iphone на странице «Переместить и масштабировать» для обрезки изображения, результат будет следующим: (здесь сохраняется соотношение сторон)

enter image description here

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

enter image description here

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

РЕДАКТИРОВАТЬ: обновить ожидаемый результат

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

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

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)];".Правильно ли мое предположение?В любом случае, чтобы решить эту проблему, мне все равно нужно будет отобразить «сжатое» изображение в другом месте приложения.

Ответы [ 3 ]

37 голосов
/ 14 июля 2011

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

23 голосов
/ 13 июля 2011

Вы должны настроить режим содержания вашего UIImageView:

myImageView.contentMode = UIViewContentModeScaleAspectFit;

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

7 голосов
/ 13 июля 2011

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

myImageView.contentMode = UIViewContentModeScaleAspectFit;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...