Свободный диспут → W3 debug — Просмотрщик картинок — Как вписать картинку в рамку (алгоритм)
Ситуация: зашел в топик www.wallpapers.ru/invader/, кликнул по превьюшке, подгрузилась, расширилась и отобразилась новым слоем соответствующая крупногабаритная картинка.Проблема: большая картинка умещается на экране по ширине, но не по высоте.
Резюме: недочет в алгоритме масштабирования.
Предлагаю выкопировку из своего алгоритма (см. спойлер ниже):
Как вписать картинку в рамку (алгоритм)
# Параметры вызова:
# img_w, img_h — габариты исходной картинки (pix)
# w_max, h_max — габариты миниатюры (предельные размеры)
# Формируем миниатюру, вписанную в холст размером [$args{w_max} x $args{h_max}]
# (при этом заданная миниатюра не может быть больше оригинальной картинки)
$w_tiny = $args{img_w} > $args{w_max}? $args{w_max}: $args{img_w};
$h_tiny = My_Output::my_round($args{img_h} / $args{img_w} * $w_tiny);
if ($h_tiny > $args{h_max}) {
$h_tiny = $args{h_max};
$w_tiny = My_Output::my_round($args{img_w} / $args{img_h} * $h_tiny);
}
# Если заданный юзером размер миниатюры не превышает габариты исходного изображения:
if ($w_tiny != $args{img_w} || $h_tiny != $args{img_h}) {
# Уменьшаем исходную картинку до размера миниатюры:
$imagemagick->Thumbnail(width => $w_tiny, height => $h_tiny);
}
Применительно к нашему случаю
# img_w, img_h — габариты исходной картинки (pix)
# w_max, h_max — предельные габариты отображаемой большой картинки (pix), вычисленные как часть окна браузера (урезанный fullscreen)
# $w_tiny и $h_tiny — окончательные размеры смасштабированного изображения, вписанного в w_max, h_max
# img_w, img_h — габариты исходной картинки (pix)
# w_max, h_max — габариты миниатюры (предельные размеры)
# Формируем миниатюру, вписанную в холст размером [$args{w_max} x $args{h_max}]
# (при этом заданная миниатюра не может быть больше оригинальной картинки)
$w_tiny = $args{img_w} > $args{w_max}? $args{w_max}: $args{img_w};
$h_tiny = My_Output::my_round($args{img_h} / $args{img_w} * $w_tiny);
if ($h_tiny > $args{h_max}) {
$h_tiny = $args{h_max};
$w_tiny = My_Output::my_round($args{img_w} / $args{img_h} * $h_tiny);
}
# Если заданный юзером размер миниатюры не превышает габариты исходного изображения:
if ($w_tiny != $args{img_w} || $h_tiny != $args{img_h}) {
# Уменьшаем исходную картинку до размера миниатюры:
$imagemagick->Thumbnail(width => $w_tiny, height => $h_tiny);
}
Применительно к нашему случаю
# img_w, img_h — габариты исходной картинки (pix)
# w_max, h_max — предельные габариты отображаемой большой картинки (pix), вычисленные как часть окна браузера (урезанный fullscreen)
# $w_tiny и $h_tiny — окончательные размеры смасштабированного изображения, вписанного в w_max, h_max
Комментарии (7)
свернуть ветку
свернуть ветку
свернуть ветку
можно же дать прямую ссылку на JPG и, масштабируй браузером, как хочешь.
свернуть ветку
свернуть ветку
свернуть ветку
свернуть ветку
Виджет для комментариев от «ВКонтакте»