Есть много изображений, они являются предпросмотром страниц.
Размер у них совершенно разный, но мне нужно их добавить в div с жесткой шириной 150px (высота изображения должна при этом масштабироваться в зависимости от пропорций изображения).
Обычный html не подходит, т.к. размер изображений большой и самих изображений много.
Только что высмотрел, что можно воспользоваться функцией imagecopyresampled (). Но толкового описания ее применения нет. Растолкуйте что к чему, пожалуйста.
Спустя 4 минуты, 3 секунды (18.05.2011 - 14:16) sharki написал(а):
// функция уменьшения изображения превью.
# $big - имя большой картинки
# $small - имя будущей маленькой картинки
# $small_patch - будущий путь маленькой картинки
# $big_patch - путь до исходной картинки, т.е оттуда будет брать твой картинку которою ты хочешь изменить
function resizeimg($big, $small, $width, $height,$small_patch,$big_patch) {
// имя файла с маштабируемым изображением
$big = $big_patch.$big;
// имя файла с уменьшенной копией
$small = $small_patch.$small;
//определиям коэфицент сжатия генерируемого изображения
$ratio = $width/$height;
// получаем размеры исходного изображения
$size_img = getimagesize($big);
list($width_src, $height_src) = getimagesize($big);
// если размеры меньше, то маштабирование не нужно
if(($width_src<$width) && ($height_src<$height)) {
copy($big, $small);
return true;
}
// получаем коэфицент сжатия исходного изображения
$src_ratio = $width_src/$height_src;
// вычисляем размеры уменьшенной копии, чтобы при мащтабировании сохранились пропорции исходного изображения
if ($ratio<$src_ratio) {
$height = $width/$src_ratio;
}
else {
$width = $height*$src_ratio;
}
// создаем пустое изображение п заданным размерам
$dest_img = imagecreatetruecolor($width,$height);
$white = imagecolorallocate($dest_img, 255, 255, 255);
if ($size_img[2] == 2) $src_img = imagecreatefromjpeg($big);
else if ($size_img[2] == 1) $src_img = imagecreatefromgif($big);
else if ($size_img[2] == 3) $src_img = imagecreatefrompng($big);
// маштабируем изображение функцией imagecopysapled()
// $dest_img - уменьшенная копия
// $src_img - исходное изображение
// $width - ширина уменьшенной копии
// $height - высота уменьшенной копии
// $size_img[0] - ширина исходного изображения
// $srze_img[1] - высота исходного изображения
imagecopyresampled($dest_img,
$src_img,
0,
0,
0,
0,
$width,
$height,
$width_src,
$height_src);
// сохраняем уменьшенную копию в файл
if ($size_img[2]==2) imagejpeg($dest_img,$small);
else if ($size_img[2]==1) imagegif($dest_img,$small);
else if ($size_img[2]==3) imagepng($dest_img,$small);
// очищаем память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
return true;
}
Спустя 11 минут, 48 секунд (18.05.2011 - 14:28) Joliat написал(а):
Спасибо, сейчас попытаюсь разобраться. А где здесь мне нужно указать ширину 150px для готового изображения и какой кусок кода отвечает за соблюдение пропорций?
Спустя 6 минут, 10 секунд (18.05.2011 - 14:34) sharki написал(а):
$width = "150"
$height = "150"
Уменьшает пропорционально, т.е шире 150 пикселей он не выйдет, высоту можешь побольше сделать
$height = "150"
Уменьшает пропорционально, т.е шире 150 пикселей он не выйдет, высоту можешь побольше сделать
Спустя 8 минут, 49 секунд (18.05.2011 - 14:43) Joliat написал(а):
если сделаю высоту больше, то не будет растягивать изображение?
Спустя 12 минут, 48 секунд (18.05.2011 - 14:56) sharki написал(а):
Joliat
Нет, написал же, пропорциональное изображение
Нет, написал же, пропорциональное изображение
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 29 минут, 22 секунды (18.05.2011 - 15:25) Krevedko написал(а):
и в диве лучше поставить overflow:hidden; на всякий случай. А то у меня ресайзер немного некорректно ресайзит картинки, имеющие слишком отличающиеся пропорции. Например разрешением 10х500 или типа того. еСЛИ КОНЕЧНО НЕ ХОЧЕШЬ, ЧТОБЫ БЛОКИ РАЗНОГО РАЗМЕРА СТАЛИ. а ТАК КРАЕШЕК КАРТИНКИ откусит.
Пардон, случайно капслок нажал )
Пардон, случайно капслок нажал )
Спустя 1 час, 34 минуты, 28 секунд (18.05.2011 - 16:59) Joliat написал(а):
// получаем размеры исходного изображения
$size_img = getimagesize($big);
list($width_src, $height_src) = getimagesize($big);
для чего мы их 2 раза получаем?
Спасибо всем, все получилось!
_____________
О-о-о-о-о-очень начинающий...