X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Масштабирование изображения!
yuriy_hb
yuriy_hb
Topic Starter сообщение 2.2.2010, 14:36; Ответить: yuriy_hb
Сообщение #1


Подскажите пожалуйста. Есть у меня изображение размером скажем 1181х1772 пискселя.
Мне нужно загрузить это фото и уменшить его до размеров 310х408 пикселя. Для этого я написал следущей сценарий:

[PHP]class add {

private $name;
private $age;
private $text;
private $width;
private $hight;


public function __construct($par_1, $par_2, $par_3) {
$this -> name = $par_1;
$this -> age = $par_2;
$this -> text = $par_3;
$this -> width = 310;
$this -> hight = 408; }

public function dob() {

//Разрешено загружать только графические фалы формата jpg, png
if (ereg("image", $_FILES['pic']['type']) and (ereg("\.jpg$", $_FILES['pic']['name']) or ereg("\.png$", $_FILES['pic']['name']))) {

$sql = "insert into Description (name, age, text, voting) value ('" . $this -> name . "', '" . $this -> age . "', '" . $this -> text . "', '0')";
mysql_query($sql);

$sql_max = mysql_query("select id_Des from Description");

while($row=mysql_fetch_assoc($sql_max)) {
$folder[] = $row['id_Des']; }

foreach ($folder as $value) {
$abc[$value] = $value; }

$max_id = max($abc);
mkdir("img/$max_id");

$destination = "img/" . $max_id . "/" . $_FILES['pic']['name'];
$temp_file = $_FILES['pic']['tmp_name'];
move_uploaded_file($temp_file, $destination);

$this -> resizeimg($destination, $_FILES['pic']['name']);
}

}

public function resizeimg($f, $format) {

//Проверяем какой формат файла загружен
if(ereg("\.jpg$", $format)) {
$src = imagecreatefromjpeg($f); }
else {
$src = imagecreatefrompng($f); }

$w_src = imagesx($src);
$h_src = imagesy($src);

if ($w_src != $this -> width) {
// вычисление пропорций
$ratio = $w_src/$this -> width;
//$ratio_h = $h_src/$this -> hight;
$w_dest = round($w_src/$ratio);
$h_dest = round($h_src/$ratio);
$dest = imagecreatetruecolor($w_dest,$h_dest);
imagecopyresized($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);
imagejpeg($dest, $f, 100);

}

}


}


?>
[/PHP]

Все работает, но есть одно но! Когда изображение уменьшается то теряются его первоначальные пропорции. Получается что ширина приводится до нужного размера (в даном служае 310 пикселей, а вот высота становиться 465 пикселя (мне нужно 408 пикселя). При таком размере фото не вписывается у мои размеры шаблона где оно должно быть. Как сделать так чтобы подогнать фото до указаных размеров при этом сохраняя пропорции и качество изображения! Спасибо!!!
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 2.2.2010, 16:19; Ответить: alexdrob
Сообщение #2


не помню где нашел функцию, но вот этой пользовался
[PHP]function resizeimg($filename, $smallimage, $w, $h)
{
$filename = "../".$filename;
$smallimage = "../".$smallimage;
$ratio = $w/$h;
$size_img = getimagesize($filename);
if (($size_img[0]<$w) && ($size_img[1]<$h)) return true;
$src_ratio=$size_img[0]/$size_img[1];

if ($ratio<$src_ratio)
{
$h = $w/$src_ratio;
}
else
{
$w = $h*$src_ratio;
}

$dest_img = imagecreatetruecolor($w, $h);
$white = imagecolorallocate($dest_img, 255, 255, 255);
if ($size_img[2]==2) $src_img = imagecreatefromjpeg($filename);
else if ($size_img[2]==1) $src_img = imagecreatefromgif($filename);
else if ($size_img[2]==3) $src_img = imagecreatefrompng($filename);

imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);

if ($size_img[2]==2) imagejpeg($dest_img, $smallimage);
else if ($size_img[2]==1) imagegif($dest_img, $smallimage);
else if ($size_img[2]==3) imagepng($dest_img, $smallimage);

imagedestroy($dest_img);
imagedestroy($src_img);
return true;
}[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yuriy_hb
yuriy_hb
Topic Starter сообщение 2.2.2010, 17:22; Ответить: yuriy_hb
Сообщение #3


Функция хороша!
Но в моем случае мне необходимо в обязательном порядке получить миниатюру строго заданного размера (310 x 408), поскольку на экран она выдается еще и с указанными в html параметрами width и height. Таким образом, если размер полученной миниатюры отличается от заданных, на экране она все равно изуродуется, даже если само изображение будет пропорциональным.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 3.2.2010, 17:55; Ответить: ZhukV
Сообщение #4


Хочу только Вам порекомендовать библиотеку!!!
Здесь также есть поное описание, правда только на анг. http://freeboard.km.ua/upload.rar

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Масштабирование сайта при уменьшении/растягивании окна браузера...
9 AddM 62857 22.6.2019, 22:41
автор: -BolgarinV-
Открытая тема (нет новых ответов) Изображения с shutterstock от 15 рублей/штука
5 Mr_Big 3662 10.9.2017, 21:30
автор: Palundra
Открытая тема (нет новых ответов) Вывод изображения при наведения на часть картинки по area
1 androv77 4828 16.7.2016, 17:32
автор: -YroKPROG-
Открытая тема (нет новых ответов) Создаю фрактальные изображения для разных целей
22 Russ33 5064 27.6.2016, 21:42
автор: Russ33
Горячая тема (нет новых ответов) Стоковые изображения для ваших сайтов по цене 3х рублей
51 contextadlinks 14293 21.10.2014, 17:28
автор: VulkanPartner


 



RSS Текстовая версия Сейчас: 28.3.2024, 21:40
Дизайн