Forum Webscript.Ru
Программирование => PHP => Тема начата: HefneR от 02 Марта 2006, 15:44:24
-
Приветствую всех. У меня такая задача, скорее по алгебре, чем про программированию. Вот написал приложение для создания превьюшек изображений в новостях в стороннию 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-число или процент, то урезаем по второй формуле. Если же меньше, то оставляем как есть. Даже и не знаю. Хочется чтобы всё было как нужно
-
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;
}
-
Вношу дополнение. Если надо масштабировать по ширине, то расчёт коэфицента дб таким - 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. В этом случае нужно проверять что больше - ширина или высота и только потом масштабировать.
-
andymc
Ой... да, конечно же, width.
Я вчера уже невменяемый был :(