Автор Тема: Пропорционально изменить размеры  (Прочитано 2967 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн HefneR

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Приветствую всех. У меня такая задача, скорее по алгебре, чем про программированию. Вот написал приложение для создания превьюшек изображений в новостях в стороннию CMS. Но вот никак не допрёт как правильно высчитывать новые размеры.

Итак, ширина превьюшки должна быть максимум 450, если ширина > 450, то высота должна пропорционально уменьшаться.

Пробовал две формулы.

1)
#####################################################
# $img_width - реальная ширина                                      
# $img_height и $img_real_height - реальная высота 
#####################################################

$img_real_height $img_height;           // резервируем реальную высоту
$width_diff $img_width 450;     // выясняем, на сколько мы урезали изображение
$img_height $img_height $width_diff;  // новая уменьшанная высота изображения


2) Эту формулу мне подсказали -  
#####################################################
# $img_width - реальная ширина                                             
# $img_height и $img_real_height - реальная высота        
#####################################################

$img_real_height $img_height;           // резервируем реальную высоту
$width_diff $img_width 450;            // на сколько мы урезали изображение в ширине
$one_percent $width_diff/100;             // 1% от того, на сколько урезали
$thirty_percent 30*$one_percent;         // 30% от того, на сколько урезали
$img_height $width_diff $thirty_percent// новая уменьшанная высота изображения


Но всё это не то.

Например по первой формуле 1600х1400 обрезается до 450х50, по второй формуле до 450х805. Однако к примеру нормально сжимается размер 500х375 (до 450х360, по второй формуле).

Я думаю стоит делать проверку, если высота больше ширины на N-число или процент, то урезаем по второй формуле. Если же меньше, то оставляем как есть. Даже и не знаю. Хочется чтобы всё было как нужно

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
Пропорционально изменить размеры
« Ответ #1 : 02 Марта 2006, 17:18:12 »
HefneR
Так?..
if($img_real_height>450) {
  //need to resample
  $coeff = (450/$img_height);
  $img_height = round($img_real_height*$coeff);
  $img_width = round($img_real_width*$coeff);
} else {
  //leave unchanged
  $img_height = $img_real_height;
  $img_width = $img_real_width;
}
LJ: Backslashed life (rss)

Оффлайн andymc

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 400
  • +1/-0
  • 0
    • Просмотр профиля
Пропорционально изменить размеры
« Ответ #2 : 02 Марта 2006, 22:09:46 »
Вношу дополнение. Если надо масштабировать по ширине, то расчёт коэфицента дб таким - 450/$img_width. То есть:
if($img_width>450) {
  //need to resample
  $coeff = (450/$img_width);
  $img_new_height = round($img_height*$coeff);
  $img_new_width = round($img_width*$coeff);
} else {
  //leave unchanged
  $img_new_height = $img_height;
  $img_new_width = $img_width;
}

Интересно, что если высота окажется больше ширины, то тогда высота вылезет за пределы 450. В этом случае нужно проверять что больше - ширина или высота и только потом масштабировать.

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
Пропорционально изменить размеры
« Ответ #3 : 03 Марта 2006, 09:59:15 »
andymc
Ой... да, конечно же, width.
Я вчера уже невменяемый был :(
LJ: Backslashed life (rss)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28