Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Пропорциональное изменение размера


Автор: Gold Dragon 18.7.2011, 13:23
Не могу логически разобрать как уменьшить картинку пропорционально.. 

Есть исходный размер картинки
- ширина = width_src 
- высота = heigth_scr

нужно уменьшить размер пропорционально, но чтобы
- максимальная ширина = width_desc
- максимальная высота = heigth_desc

При этом если исходные размеры меньше конечных, то  увеличения не должно быть

помогите составить условие ;)

зы
видимо в понедельник никак не могу решить простую задачку

Автор: vedun 18.7.2011, 16:05
Что в вашем понимании максимальная ширина ? Если картинка уменьшается пропорционально и исходная ширина = width_src то результат будет = width_src*k, где k - коэффициент пропорциональности. Честно говоря вопрос не очень понятен.

Автор: Peter 18.7.2011, 20:13
Коэффициент пропорциональности не должен превышать единицу. Так что считаем:
k = min (1, width_dest / width_src, heigth_dest / heigth_src)

Добавлено через 2 минуты и 12 секунд
k = min (1, width_dest / width_src, height_dest / height_src)

Автор: Gold Dragon 20.7.2011, 07:17
Цитата(vedun @  18.7.2011,  17:05 Найти цитируемый пост)
Что в вашем понимании максимальная ширина ? 
наверное не очень понятно объяснил. Суть простая - уменьшать картинку до тех пор пока ИЛИ ширина ИЛИ высота не будут равняться максимальному значению.

Добавлено через 6 минут и 58 секунд
Peter, поясни свой пример.. Я пишу на PHP, функции могут иметь разную реализацию

Автор: vedun 20.7.2011, 11:20
kx = width_src / width_desc
ky = heigth_scr / heigth_desc

если kx и ky меньше 1 то изменять размер не надо.
Если нет то делишь ширину и высоту картинки на тот коэффициент который больше.

Автор: Peter 20.7.2011, 12:16
Если мы зададим коэффициент пропорциональности равным width_dest / width_src, то ширина прямоугольника как раз будет равна максимальной. Если height_dest / height_src, то высота станет равна максимальной. Но у нас же требование, чтобы ни ширина не превысила максимальную, ни высота, а также чтобы коэффициент увеличения не был больше 1. Значит, из этих трех значений надо выбрать наименьшее, а не то одно из требований будет нарушено.

Добавлено через 1 минуту и 59 секунд
На этот вычисленный коэффициент надо *умножать*.

Автор: Gold Dragon 20.7.2011, 12:30
что-то малость не получается...  Опять же это простое пропорциональное уменьшение.. А если исходник 2000х1000, и нужно уменьшить до width_desc = 100 и  heigth_desc = 200.. т.е. исходник "альбом", а конечник "книга"

Автор: Peter 21.7.2011, 09:23
Значит, надо задачу более внятно поставить. Как говорится, в правильно поставленном вопросе содержится половина ответа.

Автор: Gold Dragon 21.7.2011, 14:10
Peter, ну сейчас понятно что я хочу? Т.е. любой исходник нужно вписать в рамки конечника, при условии соблюдения пропорции


Автор: maxim1000 21.7.2011, 15:36
Так а чем не подходит вариант, предложенный vedun?

Автор: Gold Dragon 21.7.2011, 15:47
всё.. перегрелся.. всё правильно smile не на то делил  smile 
Всё работает... вопрос решён

Автор: Peter 22.7.2011, 13:21
Коли решен, так ставь "птицу".

Автор: Gold Dragon 22.7.2011, 16:14
user posted image
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)