[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Уменьшаем и обрезаем изображение
Dno
Здравствуйте уважаемые гуру языка PHP.
Есть одна задача, которую я не могу реализовать.

Задача:
Написать скрипт, который при загрузке изображения на сайт, будет его обрезать уменьшать.

Например загрузили изображение размера 1280 на 1024. А мне надо его вывести в 250 на 250.
Если просто уменьшить его то то он исказится. А нужно чтобы он сначало уменьшил его до 250px (ширины или высоты. исходя из пропорций изображения).

В данном примере, изображение 1280 на 1024 уменьшить 313px на 250 и вырезать середину 250px на 250px. С функциями imagecopy resampled и прочими знаком. Саму идею не могу понять, тут скорее всего нужны какието математические рещения? В общем подскажите пожалуйста.

Спасибо.
AllesKlar
Нарисуй на листике все возможные варианты, и по одному их перебирай.
Составь сначала просто алгоритм, а потом уже програмно его реализуй.

1. X >= Y
1a Y > 250
1b Y <=250
1c X <=250

2. X <= Y
2a X<= 250
2b Y <= 250

и т.д.


_____________
[продано копирайтерам]
Dno
AllesKlar, и так несколько листов расписал) Узнал как пропорционально уменьшать изображение только.
AllesKlar
Цитата (Dno @ 2.12.2014 - 05:38)
AllesKlar, и так несколько листов расписал) Узнал как пропорционально уменьшать изображение только.

Отлично.
Значит теперь у тебя есть уменьшенное изображение с одной стороной 250px и второй > 250px
Тебе нужно обрезать края.
2 варианта:

1)
X = 250 Y > 250
$Yofset = round( ($Y -250) / 2);
imagecopy ( $dst_im , $src_im , 0,0, 0, $Yofset , 250 , 250);


2)
X > 250 Y = 250
........

Да.. и вместо 250 используй переменную. А то вдруг завтра нужно будет 260 :)

_____________
[продано копирайтерам]
walerus
Цитата
Если просто уменьшить его то то он исказится. А нужно чтобы он сначало уменьшил его до 250px (ширины или высоты. исходя из пропорций изображения).
Забавно написал...

- если просто уменьшить, то он исказится...
- нужно чтобы он сначало уменьшил его до 250px... а это как называется? не "просто уменьшить"

При всем прочем - "В данном примере, изображение 1280 на 1024 уменьшить 313px на 250 и вырезать середину 250px на 250px.", а если на фотографии будет солнце в углу, по центру пустота и внизу озеро... после твоих манипуляций что будет? - квадрат Малевича, только белый...

Пересмотри логику и смысл этого ресайза, может просто тебе нужны тумбы?
Dno
Цитата
Значит теперь у тебя есть уменьшенное изображение с одной стороной 250px и второй > 250px

К сожелению пока только с одной стороны, ищу в интернете решение данной задачи.
Пока что такая реализация...
	$tmp_name = $_FILES['img']['tmp_name'];
$i_im = imagecreatefromjpeg($tmp_name);
$width = imagesx($i_im);
$height = imagesy($i_im);
if($width > 250){
$new_width = 250;
$new_height = round($height * 250 / $width);
}else{
$new_width = $width;
$new_height = $height;
}
$o_im = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($o_im, $i_im, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
imagejpeg($o_im, 'test.jpg', 100);

Это чисто пример я понимаю что много чего не дописано.
Результат он уменьшает изображение сохраняя пропорции, если ширина больше 250px.

Знаю что и высоту надо проверить и т.д. Но пока мне бы например просто загружать изображение 1024 на 768 и получить 250 250
Быстрый ответ:

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