[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сохранение пропорции при уменьшении изображения
fallow
Всем здрасте,
Мне нужно как то уменьшить изображение до ширины 200px, если оно больше 200px
А высота должна как-то сама подстроится без потери пропорции
Это как в <img src="путь" width="200" /> а высота подстроится сама.
Или в фотошопе есть рисунок размеров 1000px я начинаю уменьшать ширину и автоматом уменьшается высота, при этом уменьшается она так, что не теряется пропрорция.
Как получать эту высоту? Кто знает алгоритм?




Спустя 18 минут, 47 секунд (5.06.2011 - 21:31) waldicom написал(а):
Помимо прочего получить размеры картинки можно с помощью imagesx(), imagesy()
Изменить размеры можно с помощью imagecopyresampled()

Спустя 1 минута, 23 секунды (5.06.2011 - 21:32) Joker написал(а):
Алгоритм простой до безобразия, тут даже примеры готовых библиотек есть, в конкурсе если поиском попользуешься то найдешь, а если не хочешь искать предлагай свои варианты по тебя поправим или создавай тему в разделе "проекты" или как то так она называется)

Спустя 32 минуты, 7 секунд (5.06.2011 - 22:04) fallow написал(а):
waldicom
Это я знаю, но функция imagecopyresampled() копирует исходное ихображение в новое.
А это новое нужно сделать max-шириной 200px, а высоту незнаю как получить.
Joker
Например есть изображение 1920x1200, 1920 - ширина. Если в фотошопе уменьшать до 200px с сохранением пропроции, то высота получается 125px.
Что-то с процентами надо мудрить?)
Например взять ширину 1920px за 100%, а 200px это ((1920/200) => 9.6%. Значить мы уменьшили ширину на 9%, получается мы должны и высоту уменьшить на 9% => 1200/9.6% =>125px
Ааааа, ура!!!!

черновик)
1000px/10%=> 100px

Спустя 15 дней, 23 часа, 57 минут, 33 секунды (21.06.2011 - 22:02) ТяЖеЛоБыТьГеРоЕм написал(а):
Когда то для себя писал этот класс

abstract class image
{
// Этот метод позволяет подогнать изображения до такого состояния до которого требуется
// $path путь до изображения
// $x нужная ширина $y нужная высота (если изображение будет 1200x900 а ширину и высоту вы зададите 90x90 это не значит что картинка будет 90x90 т.к. ей нужно быть пропорциональной а это значит что ширина или высота будет меньше).
static function show($path,$x,$y)
{
if (is_file($path))
{
$date = @GetImageSize($path);
if ($date)
{
// Вычисляем ширину изображения
$img_x = $date[0];
// Вычисляем высоту изображения
$img_y = $date[1];

if ($img_x == $img_y)
{
$W = $x; // ширина
$H = $y; // высота
}
elseif ($img_x>$img_y)
{
$prop = $img_x/$img_y;
$W = $x;
$H = ceil($W/$prop);
}
else
{
$prop = $img_y/$img_x;
$H = $y;
$W = ceil($H/$prop);
}
return "<img src='$path' width='$W' height='$H' border='0' alt='' />";
}
else
{
return FALSE;
}
}
else
{
return FALSE;
}
}
}

Спустя 2 часа, 41 минута, 20 секунд (22.06.2011 - 00:43) Snus написал(а):
высота = ширина / 1.33 (при условии, что ширина больше, чем высота (800x600 например))
И обратно

Спустя 12 дней, 20 часов, 22 минуты, 32 секунды (4.07.2011 - 21:06) ИНСИ написал(а):
fallow можешь использовать эту функцию:
function resize($src, $dest, $width, $heigh, $quality = 90) {

$ratio = $width/$heigh;
$sizeImg = getimagesize($src);
$ext = strtolower(substr($sizeImg['mime'], strpos($sizeImg['mime'], '/')+1));

$srcRatio = $sizeImg[0]/$sizeImg[1];
if($ratio < $srcRatio) $heigh = $width/$srcRatio;
else $width = $heigh * $srcRatio;

$destImg = imagecreatetruecolor($width, $heigh);
$icfunc = 'imagecreatefrom' . $ext;
if(!function_exists($icfunc)) return false;

$srcImg = $icfunc($src);
if(!imagecopyresampled($destImg, $srcImg, 0, 0, 0, 0, $width, $heigh, $sizeImg[0], $sizeImg[1]))
return false;

$sfunc = 'image' . $ext;
if($format != 'gif') {
$sfunc($destImg, $dest, $quality);
} else {
$sfunc($destImg, $dest);
}

imagedestroy($srcImg);
imagedestroy($destImg);
return true;
}


Спустя 1 минута, 5 секунд (4.07.2011 - 21:07) ИНСИ написал(а):
ТяЖеЛоБыТьГеРоЕм никогда бы не использовал твой класс smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.