[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ресайз изображения
Гость_Константин
Здравствуйте, умоляю, помогите. Есть функция ресайза изображения. Но она учитывает только ширину, где и что добавить, чтобы она еще ресазила и по высоте пропорционально
function resize($file, $type = 1, $rotate = null, $quality = null)
{
global $tmp_path;
$max_size = 50;
if ($quality == null)
$quality = 100;
if ($file['type'] == 'image/jpeg')
$source = imagecreatefromjpeg($file['tmp_name']);
elseif ($file['type'] == 'image/png')
$source = imagecreatefrompng($file['tmp_name']);
elseif ($file['type'] == 'image/gif')
$source = imagecreatefromgif($file['tmp_name']);
else
return
false;
if ($rotate != null)
$src = imagerotate($source, $rotate, 0);
else
$src = $source;
$w_src = imagesx($src);
$h_src = imagesy($src);
$w = $max_size;
$g=time();
$ext1 = strtolower(strrchr(basename($_FILES['picture']['name']), "."));
$str2 = substr(str_shuffle('abcdefghjkmnpqrstuvwxyz'), 0, 3);
$g1=$str2.$g.$ext1;
$ratio = $w_src/$w;
$w_dest = round($w_src/$ratio);
$h_dest = round($h_src/$ratio);
$dest = imagecreatetruecolor($w_dest, $h_dest);
imagecopyresampled($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src,$h_src);
imagejpeg($dest, $tmp_path.$g1, $quality);
imagedestroy($dest);
imagedestroy($src);
return $g1;
}




Спустя 9 минут, 44 секунды (18.04.2012 - 07:30) rooor написал(а):
$w_src - исходный размер по горизонтали
$h_src - исходный размер по вертикали

$w_dest - новый размер по горизонтали
$h_dest - новый размер по вертикали

вроде так...

Спустя 9 минут, 19 секунд (18.04.2012 - 07:39) Guest написал(а):
вот так?
$ratio = $w_src/$w;
$w_dest = round($w_src/$ratio);
$h_dest = round($h_src/$ratio);
if ($h_dest>$h) {
$ratio = $h_dest/$h;
$w_dest = round($w_dest/$ratio);
$h_dest = round($h_dest/$ratio);
};

Спустя 4 минуты, 50 секунд (18.04.2012 - 07:44) Гость_Константин написал(а):
Вот так сделал, правильно ли?

if ($w_src>$w) {
$ratio = $w_src/$w;
$w_dest = round($w_src/$ratio);
$h_dest = round($h_src/$ratio);
};
if ($h_src>$h) {
$ratio = $h_src/$h;
$w_dest = round($w_src/$ratio);
$h_dest = round($h_src/$ratio);
};

Спустя 39 минут, 10 секунд (18.04.2012 - 08:23) Гость_Константин написал(а):
Подумал головой и сделал окончательный вариант:

$ratio=1;
if ($w_src>$w) {
$ratio = $w_src/$w;
};
if ($h_src>$h) {
$ratio = $h_src/$h;
};
$w_dest = round($w_src/$ratio);
$h_dest = round($h_src/$ratio);

Спустя 23 минуты, 37 секунд (18.04.2012 - 08:47) TranceIT написал(а):
Гость_Константин
На форуме классов по ресайзу уже как минимум 3 штуки выложили. Это только те, что я помню. Поиском воспользуйтесь.

Спустя 29 минут, 16 секунд (18.04.2012 - 09:16) Guest написал(а):
Спасибо за ответы)))

Спустя 21 минута, 39 секунд (18.04.2012 - 09:38) ИНСИ написал(а):
Guest Попробуйте так сделать.
$ratio = $w_dest / $h_dest;
$srcRatio = $w_src / $h_src;

if($ratio < $srcRatio)
$h_dest = $w_dest / $srcRatio;
else
$w_dest = $h_dest * $srcRatio;
Быстрый ответ:

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