Я видел во многих постах изменение размера изображения с сохранением соотношения сторон. Эти функции используют фиксированные точки (ширина и высота) для RECT при изменении размера. Но в моем проекте мне нужно изменить размер представления на основе только ширины, высота должна быть взята автоматически на основе соотношения сторон. кто-нибудь поможет мне достичь этого.
136
newWidth
здесь переменная, она уже естьi_width
.UIGraphicsBeginImageContextWithOptions(CGSizeMake(newWidth, newHeight), NO, 0);
вместо этогоUIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight));
Если вы не знаете, будет ли изображение портретным или альбомным (например, пользователь делает снимок с помощью камеры), я создал другой метод, который принимает параметры максимальной ширины и высоты.
Допустим, у вас есть
UIImage *myLargeImage
соотношение 4: 3.UIImage с измененным размером будет 1024x768, если ландшафт; 768x1024, если портрет. Этот метод также генерирует изображения с высоким разрешением для отображения сетчатки.
источник
min(ratioX, ratioY)
. В противном случае, если ширина больше, она может не соответствовать максимальной высоте.Лучший ответ Maverick 1st's правильно переведен на Swift (работает с последним Swift 3 ):
источник
спасибо @ Maverick1st алгоритм, я его реализовал
Swift
, в моем случае высота является входным параметромисточник
Этот метод относится к категории на UIImage. Масштабируется, чтобы уместиться в несколько строк кода, используя AVFoundation. Не забудьте импортировать
#import <AVFoundation/AVFoundation.h>
.источник
Swift 5 версия аспекта к высоте , основанная на ответе @ János
Использует современный
UIGraphicsImageRenderer
API, поэтому действительныйUIImage
гарантированно вернется.Вы можете использовать это в сочетании с (векторным) активом изображения PDF, чтобы сохранить качество при любом размере рендеринга.
источник
Самый простой способ - установить рамку
UIImageView
и установитьcontentMode
один из параметров изменения размера.Код выглядит так: это можно использовать как служебный метод.
источник
Программный:
Раскадровка:
источник
Ну, у нас есть несколько хороших ответов для изменения размера изображения, но я просто изменяю согласно моей необходимости. надеюсь, это поможет кому-то, как я.
Мое требование было
Вы можете также проверить это для расчета размера.
источник
Просто импортируйте AVFoundation и используйте
AVMakeRectWithAspectRatioInsideRect(CGRectCurrentSize, CGRectMake(0, 0, YOUR_WIDTH, CGFLOAT_MAX)
источник
Чтобы улучшить ответ Райана:
источник
Если для масштаба установлено значение 0,0, используется коэффициент масштабирования основного экрана, который для дисплеев Retina составляет 2,0 или выше (3,0 на iPhone 6 Plus).
источник
Решение Райана @ Райан в быстром коде
использовать:
источник
В Swift 3 есть некоторые изменения. Вот расширение к UIImage:
источник
Zeeshan Tufail и Womble отвечают в Swift 5 с небольшими улучшениями. Здесь у нас есть расширение с 2 функциями для масштабирования изображения до
maxLength
любого размера и сжатия JPEG.источник
Этот был идеальным для меня. Сохраняет соотношение сторон и принимает
maxLength
. Ширина или Высота не болееmaxLength
источник
Вычисляет лучшую высоту изображения для доступной ширины.
источник
Я решил это намного проще
множитель шкалы будет определять смещение изображения, чем больше множитель, тем меньше изображение. так что вы можете проверить, что подходит вашему экрану.
Или вы также можете получить мультипликатор, разделив ширину изображения / ширину экрана.
источник