Вам нужно всего несколько шагов:
1. scale = imageWidth / 180;
2. scale = (imageHeight/scale>180) ? imageHeight/180 : scale;
Первый установит масштабный коэффициент, необходимый для ширины 180 (на основании вашего комментария ВСЕГДА больше 180)
Второй проверит, будет ли высота больше 180 с этой шкалой. Если это так, то масштаб будет высота / 180. Если это не так, у вас уже есть максимальная высота.
Тогда вам также понадобятся шаги, чтобы получить фактическую ширину и высоту:
width = imageWidth/scale;
height = imageHeight/scale;
Учитывая, что вы хотите сделать imageWidth между 170 и 180, я думаю, обрезка изображения также возможна. Если это так, вам нужна дополнительная проверка
if (width<170) {
width = 170;
height = imageHeigh / (imageWidth/170);
//resize image to width and height
//crop image to height = 180
}