Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: imagecopyresized

Сообщения:  [1-10]   [11-14] 

 
 автор: sim5   (01.06.2008 в 11:25)   письмо автору
 
   для: Foxel   (01.06.2008 в 11:11)
 

Так, если изображение будет, ну пусть даже в два раза по высоте, например, больше ширины, то никак не получиться взять нужный кусочек "вслепую". Придется все таки уши выбирать.) Ну автора вроде это не волнует.

   
 
 автор: Foxel   (01.06.2008 в 11:11)   письмо автору
 
   для: sim5   (30.05.2008 в 15:26)
 

Чтобы не срезать бороду ))) и вписать без нарущения пропорций в тумбу 150*100 лучше сделать тумбу с полями.

// $img - входное 
$sx = imagesx($img);
$sy = imagesy($img);

// $nimg - выходное
$nimg  = imagecreatetruecolor(150, 100);
imagefilledrectangle($nimg, 0, 0, 149, 99, 0xFFFFFF); // белый фон

$scl = min(150/$sx, 100/$sy);
$putw = $scl*$sx;
$puth = $scl*$sy;
$putx = (150 - $putw)/2;
$puty = (100 - $puth)/2;

imagecopyresampled($nimg, $img, $putx, $puty, 0, 0, $putw, $puth, $sx, $sy); 


ну для красоты можно махонькие поля добавить и по вписываемой стороне... (заменить расчет $scl)
$scl = min(146/$sx, 96/$sy);// по два пиксела обязательных полей

   
 
 автор: sim5   (31.05.2008 в 14:22)   письмо автору
 
   для: mastergrom   (31.05.2008 в 13:51)
 

Вам Foxel написал код, и если не важно что в результате получать, берите его. В этом случае у вас регион для вырезки будет центрироваться по большей стороне изображения. Что вам не подходит?

   
 
 автор: mastergrom   (31.05.2008 в 13:51)   письмо автору
 
   для: sim5   (30.05.2008 в 15:26)
 

Это не важно ... Ты можешь подсказать как расчитывать все ?

   
 
 автор: sim5   (30.05.2008 в 15:26)   письмо автору
 
   для: mastergrom   (30.05.2008 в 15:04)
 

Выше уже готовое. Но вот как вы будете контролировать обрезку "вслепую"? Я еще понимаю, что при уменьшении изображения у вас придется обрезать по одной из сторон 10, ну ладно 30 рх. А если это портрет? Ведь вслепую вы можете обрезать все до глаз и ниже бороды, и у вас останется нос с ушами.)) Я вот о чем. Как в случае, когда остаток больший 100, будет достигать не малую величину, как вы будете принимать решение - где начинать вырезку?

   
 
 автор: mastergrom   (30.05.2008 в 15:04)   письмо автору
 
   для: sim5   (30.05.2008 в 09:25)
 

Спасибо, но это мне не подходит ...
Вобще, я так понимаю, что для того что-бы сделать тумбу $width=150 $height=100 с исходного изображения с $WIDTH и $HEIGHT у которого $WIDTH>$HEIGHT нужно:
1) $k=$height/$width
2) отношение меньшей стороны к большей у исходного изображения $K=$HEIGHT/$WIDTH

если $K>$k то оставлять max($WIDTH,$HEIGHT) как сторону которая вписывается полностью, а min($WIDTH, $HEIGHT), которая обрезается

если же $K<=$k то оставлять min($WIDTH, $HEIGHT) как строну которая полностью вписывается и max($WIDTH, $HEIGHT) - сторона которая обрезается..


но как правильно расчитать обрезку сторон и координаты?

   
 
 автор: sim5   (30.05.2008 в 09:41)   письмо автору
 
   для: ddhvvn   (30.05.2008 в 09:27)
 

Ну да:
600 / 800 = 0.75 (< 0 портрет) (тут, ну скопировал автоматом)))
800 / 800 = 1 (стороны равны)
800 / 600 = 1,3 > 1

PS. Надо прекращать, смотреть одно (у меня видео связь с Москвой была)) , читать другое, и писать третье... с дури чего тока не напишешь.))

   
 
 автор: ddhvvn   (30.05.2008 в 09:27)   письмо автору
 
   для: sim5   (30.05.2008 в 06:37)
 

>width / height : меньше 0 - портрет, равно 0 - квадрат, больше 0 - альбом. Отсюда знаем по какой из сторон уменьшить.
О_о ??? Может 1? =))

   
 
 автор: sim5   (30.05.2008 в 09:25)   письмо автору
 
   для: Foxel   (30.05.2008 в 08:46)
 

А вообще же, все это не пойдет, получется, что обрезка "вслепую" будет. Автору - может воспользоваться одним их этого:
DHTML
Обрезка с возможностью указанных пропорций
Еще обрезка
На стороне клиента, на выбранном для загрузки изображении выбираем регион и его координаты передаем на сервер вместе с загружаемым изображением. Если изображение большое по размеру, то у клиента выводить его с уменьшением (в процентах), а расчет координатов региона (JS) производить с учетом этого масштаба. Т.е. нужно будет написать свой небольшой JS сценарий к одному из вышепредложенных скриптов.

   
 
 автор: Foxel   (30.05.2008 в 08:46)   письмо автору
 
   для: mastergrom   (30.05.2008 в 00:57)
 


// $img - входное
$sx = imagesx($img);
$sy = imagesy($img);

// $nimg - выходное
$nimg  = imagecreatetruecolor(150, 100);

$scl = min($sx/150, $sy/100);
$cutw = $scl*150;
$cuth = $scl*100;
$cutx = ($sx - $cutw)/2;
$cuty = ($sy - $cuth)/2;

imagecopyresampled($nimg, $img, 0, 0, $cutx, $cuty, 150, 100, $cutw, $cuth);

   

Сообщения:  [1-10]   [11-14] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования