| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Пропорциональное изменение размера |
| Автор: 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 |
| наверное не очень понятно объяснил. Суть простая - уменьшать картинку до тех пор пока ИЛИ ширина ИЛИ высота не будут равняться максимальному значению. Добавлено через 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 |
| всё.. перегрелся.. всё правильно Всё работает... вопрос решён |
| Автор: Peter 22.7.2011, 13:21 |
| Коли решен, так ставь "птицу". |
| Автор: Gold Dragon 22.7.2011, 16:14 |