|
|
|
|
|
для: 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);// по два пиксела обязательных полей
|
| |
|
|
|
|
|
|
|
для: mastergrom
(31.05.2008 в 13:51)
| | Вам Foxel написал код, и если не важно что в результате получать, берите его. В этом случае у вас регион для вырезки будет центрироваться по большей стороне изображения. Что вам не подходит? | |
|
|
|
|
|
|
|
для: sim5
(30.05.2008 в 15:26)
| | Это не важно ... Ты можешь подсказать как расчитывать все ? | |
|
|
|
|
|
|
|
для: mastergrom
(30.05.2008 в 15:04)
| | Выше уже готовое. Но вот как вы будете контролировать обрезку "вслепую"? Я еще понимаю, что при уменьшении изображения у вас придется обрезать по одной из сторон 10, ну ладно 30 рх. А если это портрет? Ведь вслепую вы можете обрезать все до глаз и ниже бороды, и у вас останется нос с ушами.)) Я вот о чем. Как в случае, когда остаток больший 100, будет достигать не малую величину, как вы будете принимать решение - где начинать вырезку? | |
|
|
|
|
|
|
|
для: 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) - сторона которая обрезается..
но как правильно расчитать обрезку сторон и координаты? | |
|
|
|
|
|
|
|
для: ddhvvn
(30.05.2008 в 09:27)
| | Ну да:
600 / 800 = 0.75 (< 0 портрет) (тут, ну скопировал автоматом)))
800 / 800 = 1 (стороны равны)
800 / 600 = 1,3 > 1
PS. Надо прекращать, смотреть одно (у меня видео связь с Москвой была)) , читать другое, и писать третье... с дури чего тока не напишешь.)) | |
|
|
|
|
|
|
|
для: sim5
(30.05.2008 в 06:37)
| | >width / height : меньше 0 - портрет, равно 0 - квадрат, больше 0 - альбом. Отсюда знаем по какой из сторон уменьшить.
О_о ??? Может 1? =)) | |
|
|
|
|
|
|
|
для: Foxel
(30.05.2008 в 08:46)
| | А вообще же, все это не пойдет, получется, что обрезка "вслепую" будет. Автору - может воспользоваться одним их этого:
DHTML
Обрезка с возможностью указанных пропорций
Еще обрезка
На стороне клиента, на выбранном для загрузки изображении выбираем регион и его координаты передаем на сервер вместе с загружаемым изображением. Если изображение большое по размеру, то у клиента выводить его с уменьшением (в процентах), а расчет координатов региона (JS) производить с учетом этого масштаба. Т.е. нужно будет написать свой небольшой JS сценарий к одному из вышепредложенных скриптов. | |
|
|
|
|
|
|
|
для: 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);
|
| |
|
|
|
|